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

posted @ 2021-04-01 16:42  zhudaheng123  阅读(1181)  评论(0)    收藏  举报