eval && 倒引号 && $()

倒引号

倒引号的表示“,也叫反引号。
倒引号括起来的字符串被shell解释为命令行,在执行时,shell会先执行该命令,并以它的标准输出结果取代整个倒引号部分。
如:
eval && 倒引号 && $()
shell在执行此条命令时,先执行倒引号中的命令date,将输出结果取代$today。
利用倒引号的这种功能可以进行命令置换,即把倒引号括起来的命令的执行结果赋给指定变量。

进行命令置换时,可以是单条命令,也可以是多条命令的组合
如:
eval && 倒引号 && $()
另外,倒引号还可以嵌套使用,但应注意,要加”\”进行转义。
如:转义后:
eval && 倒引号 && $()
不转义:
eval && 倒引号 && $()


$()

()shellshell ()部分。
eval && 倒引号 && $()
可以看出使用倒引号和$()结果一样,但是为什么还要两个都使用?
那是因为因为它们还有区别的:
先看两个例子:
第一个:
eval && 倒引号 && $()eval && 倒引号 && $()
第二个:
eval && 倒引号 && $()
eval && 倒引号 && $()
由这两个例子可以看出倒引号和$()的区别。

**倒引号对 \ 进行了转义 ,要向使用 \ 就需要加 \ 。
而$()未进行转义,就是普通的 \ 。**


eval

eval是条命令,重新运算求出参数的内容。(主要用来两次扫描参数)
格式为:eval [arg …]
它利用别的命令行作为自己的参数,进行相应的变量或命令替换,并把替换结果结合成一个新的命令行,然后读取并加以执行。

(1)eval命令将会首先扫描命令行进行所有的替换,然后再执行命令。该命令使用于那些一次扫描无法实现其功能的变量。该命令对变量进行两次扫描。这些需要进行两次扫描的变量有时候被称为复杂变量。

(2)eval可以用于回显简单变量
eval && 倒引号 && $()
eval && 倒引号 && $()

(3)两次扫描
eval && 倒引号 && $()
eval && 倒引号 && $()
第一次扫描将$redirect替换为>,第二次执行ls > file,因此完成重定向。

(4)获得最后一个参数
eval && 倒引号 && $()
eval && 倒引号 && $()

参考博客:
http://blog.****.net/chenxucx/article/details/73771687
http://blog.****.net/xy913741894/article/details/73741758