eval && 倒引号 && $()
倒引号
倒引号的表示“,也叫反引号。
倒引号括起来的字符串被shell解释为命令行,在执行时,shell会先执行该命令,并以它的标准输出结果取代整个倒引号部分。
如:
shell在执行此条命令时,先执行倒引号中的命令date,将输出结果取代$today。
利用倒引号的这种功能可以进行命令置换,即把倒引号括起来的命令的执行结果赋给指定变量。
进行命令置换时,可以是单条命令,也可以是多条命令的组合
如:
另外,倒引号还可以嵌套使用,但应注意,要加”\”进行转义。
如:转义后:
不转义:
$()
可以看出使用倒引号和$()结果一样,但是为什么还要两个都使用?
那是因为因为它们还有区别的:
先看两个例子:
第一个:
第二个:
由这两个例子可以看出倒引号和$()的区别。
**倒引号对 \ 进行了转义 ,要向使用 \ 就需要加 \ 。
而$()未进行转义,就是普通的 \ 。**
eval
eval是条命令,重新运算求出参数的内容。(主要用来两次扫描参数)
格式为:eval [arg …]
它利用别的命令行作为自己的参数,进行相应的变量或命令替换,并把替换结果结合成一个新的命令行,然后读取并加以执行。
(1)eval命令将会首先扫描命令行进行所有的替换,然后再执行命令。该命令使用于那些一次扫描无法实现其功能的变量。该命令对变量进行两次扫描。这些需要进行两次扫描的变量有时候被称为复杂变量。
(2)eval可以用于回显简单变量
(3)两次扫描
第一次扫描将$redirect替换为>,第二次执行ls > file,因此完成重定向。
(4)获得最后一个参数
参考博客:
http://blog.****.net/chenxucx/article/details/73771687
http://blog.****.net/xy913741894/article/details/73741758