标签:man can val address target 引用 判断 shell脚本 实例
例如:
x="abc" y=‘$x‘ eval echo $y
结果输出:
abc
eval echo $y相当于执行了两次echo $y(更确切地说是执行了两次屏幕上显示在eval后面的命令)
第一次:执行的是echo $y输出变量y的值为‘$x‘(y=‘$x‘必须要用单引号包裹$符防止$符拓展),执行完后eval后面的命令就变成了echo $x
第二次:执行的是echo $x输出变量x的值为"abc"
实例:
shell脚本test.sh内容如下:
address00A_ip=a.a.a.a address00B_ip=b.b.b.b address00C_ip=c.c.c.c #code can be 00A, 00B, 00C code=$1 target_address=`eval echo ‘$‘{address${code}_ip}`
echo $target_address
执行test.sh,传入参数00B:
sh test.sh 00B
输出:
b.b.b.b
eval echo ‘$‘{address${code}_ip}使用eval构造出一个可变名的变量,根据变量名中实际生成的参数值不同,定位到一组相似变量中的其中一个,快速获取变量值,省略了冗余的if-else判断。
注意这里引用该变量的$符必须要用单引号包裹,因为eval在执行第一遍其后的命令时不希望$符拓展,而是只希望它充当一个单纯的$字符,要优先将变量名里面的变量引用解析成具体值,第一遍执行过后终端显示的结果变成:${address00B_ip},第二遍执行时,终端在看到没有单引号包裹的$符时,则把它当成是变量的引用符了。
扩展:
可变名变量也可以拿用来整数运算的$[]表示,不过只适用于整体变量值为整数的情况,例如:
shell脚本test2.sh内容如下:
apple_price=5 banana_price=three fruit_name=$1 echo ${fruit_name}\‘s price is $[${fruit_name}_price]
执行test2.sh,分别传入参数apple和banana:
sh test2.sh apple sh test2.sh banana
分别输出:
apple‘s price is 5 banana‘s price is 0
标签:man can val address target 引用 判断 shell脚本 实例
原文地址:https://www.cnblogs.com/Triple-H/p/14260161.html