Linux之eval

来源:互联网 发布:数据字典模型作用 编辑:程序博客网 时间:2024/06/05 18:24

eval :命令替换
编写以下脚本,实现统计当前目录中文件个数。
这里写图片描述
结果如下:
这里写图片描述
报错了。这时因为没有解释出pipe变量的内容,所以会报错。
加上eval后
这里写图片描述
结果为:
这里写图片描述
达到预期效果。eval进行两次扫描,第一次扫描,将pipe变量替换为 | ,第二次扫描再执行命令行命令,这时,shell会识别 | 为管道符号,所以命令成功运行。
但是同是命令替换,反引号`和$()却没有这种效果。他们只是会将pipe替换 | ,但是shell却无法识别此时的 | 。所以结果会报错。

再举个例子说明。
有一个files文件内容为hello file
编写一个shell脚本,先用一个变量接收file的内容,再将该变量的内容显示出来。
没用eval时
这里写图片描述
结果为
这里写图片描述
没有解析cat命令。
换成eval
这里写图片描述
结果为:
这里写图片描述
总结:eval 可以替换间接的命令,并使shell识别。
反引号和$()只能替换简单命令。
ps:反引号与$()的区别

原创粉丝点击