一、eval
eval命令会首先扫描命令行进行所有的置换,然后再执行该命令。该命令适用于需要对变量进行两次扫描的情况。
eval命令在一个语句中,是按次序执行的,只不过再执行之前,先进行置换。(eval后的语句必须是一个命令,若不是则出错)
$HU="hu file" $eval $HU bash :hu: 找不到命令
|
$HU="echo file" $eval $HU file
|
二、命令替换 $()和``
$()和``在一个语句中,不管其在什么位置,都是先执行其内部的命令,然后在执行整条语句。但是两者在处理反斜杠时是有区别的。
$ aa=bb
$ bb=cc
$ echo -n "$(eval echo \$$aa)"
cc$ echo -n `eval echo \$$aa`
1532aa$ echo -n `eval echo \\$$aa`
cc$
|
究竟什么原因呢??
三、eval 和 $()
$ name=aaa
$ value=bbb
$ eval $(echo "$name=$value")
$ echo $aaa
bbb
$
|
分析:$()总是先执行,所以先执行echo "$name=$value" , 将变量代入后:echo "aaa=bbb" , 整条语句就变成: eval aaa=bbb ,而eval是将其后的语句当成一条指令执行: aaa=bbb , 所以最后就相当于是在赋值。
阅读(1474) | 评论(1) | 转发(0) |