Linux下的eval以及和$(),``

来源:互联网 发布:淘宝店铺自己做活动 编辑:程序博客网 时间:2024/05/22 15:50

假设cmd=” echo 33”
eval $cmd 等价于 “echo 33 ”
其实相当是先让后边的变量先执行,再执行其结果;
同时这些需要进行两次扫描的变量有时候被称为复杂变量。

同时在shell脚本中还有等价的两条命令“ ,$() 都是做命令替换的,和上面变量替换差不多;都是用来重组命令行的,先完成引号里的命令行,然后将其结果替换出来,再重组成新的命令行。

$( )与``
在操作上,这两者都是达到相应的效果,但是建议使用\$( ),理由如下:

``很容易与”搞混乱,尤其对初学者来说。
在多层次的复合替换中,``必须要额外的跳脱处理(反斜线),而$( )比较直观。

例如:

将cmd1执行结果作为cmd2参数,再将cmd2结果作为cmd3的参数
cmd3 $(cmd2 $(cmd1))

如果是用反引号,直接引用是不行的,还需要作跳脱处理
cmd3 `cmd2 \`cmd1\` `

最后,$( )的弊端是,并不是所有的类unix系统都支持这种方式,但反引号是肯定支持的。

原创粉丝点击