shell脚本中的命令代换指:执行命令并将命令替换部分替换为执行该命令后的结果,即先执行该命令,然后将命令的执行结果替换到该命令行中;
Shell脚本中提供了三种命令命令代换:反引号(``)、$()、eval(也是Shell脚本中的一种命令代换)
三种命令代换的功能及作用:
反引号(``):会对命令行中'\'进行跳脱处理;
$():相对于C语言中的(),用于算术运算;
现以具体实例对比反引号(``)和$();
实例1
解释:因为Shell中的单引号会保持所有字符的字面值,所以引号里的执行结果应为\\,但经过反引号后,执行结果为\,即反引号对'\\'作了跳脱处理;
实例2
使用反引号和$()的结果相同,两者可通用;
eval
(1)功能:告知shell取出eval的参数,重新运算求出参数的内容;
语法形式:eval [参数] —–其中参数不限数目,彼此之间用分号分开。
(a) eval可读取一连串的参数,然后再依参数本身的特性来执行。
(b) ‘参数’是在终端上键入的一条普通命令行。然而当在它前面放上eval时,其结果是shell在执行命令行之前扫描它两次,再次运算求出参数的内容。
注意:如果变量中包含任何需要shell直接在命令行中看到的字符(不是替换的结果),就可以使用eval。命令行结束符(; | &),I/o重定向符(< >)和引号就属于对shell具有特殊意义的符号,必须直接出现在命令行中。
(2)取得最后一个参数
实例1
实例2
反引号、$()和eval是shell中的命令代换,各有用途,常用的是反引号和$(),这两个必须熟练掌握;