linux shell命令之eval
eval命令:使执行命令跳转的初始步骤
var1=BLACK
eval echo $var1
BLACK
echo $var1
pipe="|"
ls $pipe wc -l
ls: cannot access '|': No such file or directory
ls: cannot access 'wc': No such file or directory
eval ls $pipe wc -l
67
事实上,如果变量中包含任何需要Shell直接在命令中看到的字符,就需要
使用eval命令。命令结束符(;\ &),I/O重定向符(< >)和引号这些对Shell有
特殊意义的符号,必须直接出现在命令行中。
#!/bin/bash
echo "The number of arguments passed to this script:$#"
echo -n "The last argument is:"
eval echo \$$# #用eval显示最后一个输入参数
注:Shell在第1轮扫描该命令行时,反斜杠使紧跟其后的$被转义,即用$符号本身
代替了\$,在进行变量替换时,Shell特殊参数$#替换它的值,第一轮扫描后,它的命令
变为 echo $4
./evalpos.sh army boot cap disk
The number of arguments passed to this script:4
The last argument is:disk
cat evalsource
var1 APPLE
var2 BAIDU
var3 CAMEL
var4 DOT
var5 EMULE
vi evalre.sh
#!/bin/bash
#NAME变量保存每行的第1列,VALUE变量保存每行的第2列
while read NAME VALUE
do
eval "${NAME}=${VALUE}" #eval命令实现NAME变量的赋值
done < evalsource #代码块重定位
#测试var1~var5变量的值
echo "var1=$var1"
echo "var2=$var2"
echo "var3=$var3"
echo "var4=$var4"
echo "var5=$var5"
./evalre.sh
var1=APPLE
var2=BAIDU
var3=CAMEL
var4=DOT
var5=EMULE
浙公网安备 33010602011771号