shell中反引号和$()的区别以及eval命令

来源:互联网 发布:fatego网络连接异常 编辑:程序博客网 时间:2024/06/07 20:14

反引号和$()的区别
反引号和$()都是shell脚本中用来进行命令代换的命令,命令代换就是运行一个命令将其结果交给一个变量。

echo ‘echo \\ ’ //反引号
echo $(echo \\ )

这里写图片描述

我们再把脚本改成8个\
这里写图片描述

总结:
1、反引号本身对\做了解释,保留了本身的意思。如果我们想在反引号中起到\的特殊意义,用两个\来表示
2、()\使\()是比较新的用法,如果要使用的话就优先使用$()。

eval命令
eval命令的作用是再次执行命令行处理,也就是对一个命令行执行两次命令行的处理(执行两次命令行处理不是执行两次命令)。eval后面跟一个命令,eval会对后面的命令进行两次扫描,如果第一次扫描发现这个命令是个普通的命令就会执行这个命令,如果后面的命令是含有变量的简洁引用,就保证间接引用的语义。

1、eval命令先扫描命令行做一个置换,然后再执行该命令。这个命令适用于那些无法扫描一次就实现其功能的变量,这个命令会对变量进行两次扫描,这就是复杂命令。不过eval命令也适用于简单的命令时是对其的回显。
2、eval也可以用于回显简单变量,不一定时复杂变量
这里写图片描述
3、两次扫描,我们首先创建一个名为test的小文件,在这个小文件中含有一些文本。接着,将cat test赋给变量myfile,现在我们e cho该变量,看看是否能够执行上述命令。
这里写图片描述
4、获得最后一个参数

echo “Last argument is (evalecho$#)”
echo “Last argument is (evalecho#)”