shell中的` `和$()的区别及eval命令

2017-07-16 14:33 阅读 1,007 次 评论 0 条

命令代换

在shell编程中,一共有两种命令代换方式:反引号和$() 。shell先执行该命令,然后将输出结果立刻代换到当前命令行中。

比如:我们用反引号替换date命令,$()代换pwd:

当然,和$() 仅仅是命令代换,相当于多产生了一个别名,而并没有将原先命令替换。

既然是两种命令代换,那么是否有什么区别或适用场景吗?

在多层次的符合代换命令中,反引号需要添加"\"转义,而$()则不需要,比如下列示例:

eval命令

eval首先会扫描命令行进行所有的置换 ,然后在执行该命令,因此,eval适用于那些一次扫描无法实现其功能的变量。

所以,eval命令会通过以下两个步骤来执行某个行为:

下面我们touch一个file文件,内容为"Hello World",定义一个内容是cat file的字符串变量,用echo引用该变量,则直接打印的是该字符串,而用eval则可以显示file的内容。

原因在于eval命令第一次扫描进行了变量置换,第二次扫描执行了该字符串所包含的命令cat file。

除此之外,eval另一个功能是获取shell脚本的最后一个参数,我们用以下shell测试:

注意:

① eval不能获得函数处理结果

② eval不能嵌套,或者说嵌套没有任何意义。比如:eval(eval("happy")),eval将后面的eval命令当做命令字符串去执行,失去了嵌套作用,嵌套被指令替换取代。

版权声明:本文著作权归原作者所有,欢迎分享本文,谢谢支持!
转载请注明:shell中的` `和$()的区别及eval命令 | 术与道的分享
分类:操作系统 标签:, ,
1024do.com导航_术与道导航平台

发表评论


表情