eval :命令替换
编写以下脚本,实现统计当前目录中文件个数。
结果如下:
报错了。这时因为没有解释出pipe变量的内容,所以会报错。
加上eval后
结果为:
达到预期效果。eval进行两次扫描,第一次扫描,将pipe变量替换为 | ,第二次扫描再执行命令行命令,这时,shell会识别 | 为管道符号,所以命令成功运行。
但是同是命令替换,反引号`和$()却没有这种效果。他们只是会将pipe替换 | ,但是shell却无法识别此时的 | 。所以结果会报错。
再举个例子说明。
有一个files文件内容为hello file
编写一个shell脚本,先用一个变量接收file的内容,再将该变量的内容显示出来。
没用eval时
结果为
没有解析cat命令。
换成eval
结果为:
总结:eval 可以替换间接的命令,并使shell识别。
反引号和$()只能替换简单命令。
ps:反引号与$()的区别