码迷,mamicode.com
首页 > 系统相关 > 详细

linux常用命令—eval

时间:2021-01-14 11:26:41      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:man   can   val   address   target   引用   判断   shell脚本   实例   

eval command:扫描执行两次command

例如:

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

分别输出:

apples price is 5
bananas price is 0

linux常用命令—eval

标签:man   can   val   address   target   引用   判断   shell脚本   实例   

原文地址:https://www.cnblogs.com/Triple-H/p/14260161.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!