命令代换
命令替换(command substitution)是指 Shell 执行命令并将命令替换部分替换为执行该命令后的结果。
命令代换有两种方式: command
和 $(command)
command
注意是:反引号 (在!左边的那个)
既然两种方式都可以用来命令替换,那他们肯定存在不同之处
(1)反引号容易与单引号混淆
(2)反引号执行命令替换时,会对其中的command命令中包含的 \ 进行跳脱处理
我们知道,shell里的单引号会保持所有字符的字面值,所以引号里的执行结果应该是 \ 。但是用反引号输出的结果却是 \ ,这就是由于它对 \ 进行了跳脱处理。
(3)嵌套的命令替换
在多层次的复合替换中,反引号须要额外的跳脱( ` )处理,而 $( ) 则比较直观。例如:
cmd1
cmd2你这么写就是错的。需要`cmd1\`cmd2\
如果有多个命令嵌套就比较复杂了。而用
()就比较直观比如
(cmd1
(cmd2
(cmd3)))
注:反引号 基本上可用在全部的 unix shell 中使用,若写成 shell script ,其移植性比较高。而 $() 并不见的每一种 shell 都能使用.
eval命令
功能说明:告知shell取出eval的参数,重新运算求出参数的内容。
语 法:eval [参数]
补充说明:eval可读取一连串的参数,然后再依参数本身的特性来执行。
参 数:参数不限数目,彼此之间用分号分开。
eval执行命令行前扫描两次,再次运算求出参数内容,eval是对Bash Shell命令行处理规则的灵活应用,进而构造”智能”命令实现复杂的功能。