shell脚本的命令代换

命令代换

一、命令代换
命令代换是指先完成引号或者括号中的命令行,然后将其结果替换出来,在重新组成新的命令行。shell脚本中用于命令行代换的一反引号(` `),和$()。那么这两个又有什么不同呢?

运行后:

表面上看起来两个结果并没有什么不同,但仔细分析会发现有以下不同点。
反引号(` `)的缺点
(a)它非常容易和单引号混淆
(b)它会对\进行跳脱处理,而$()不会
如下:

这里我们可以看出,shell里的单引号会保持所有自负的字面值,所以引号里的执行结果应该是\。但用反引号输出的结果是\,说明是由于它对\进行了跳脱处理。
一般情况下建议使用$(),这样比较清楚直观
$()的缺点是:
并不是所有的类unix系统都支持这种形式,但反引号是支持的,也就是说移植性不如反引号。
算术代换:$(())
用于算术计算,$(())中的shell变量取值将转换成整数

运行结果:


二、eval命令
功能说明:告知shell取出eval的参数,重新运算求出参数的内容。
补充说明:eval可读取一连串的参数,然后再依照参数本身的特性来执行。
eval执行命令行前扫描两次,再次运算求出参数内容,eval是对bash shell命令行处理规则的灵活应用,进而构造“智能”命令实现复杂功能。
1.eval命令也可以用于回显简单变量,不一定是复杂变量。

2.执行含有字符串的命令
首先创建一个名为test的文件,在这个文件中输入如下文本;

接着将test赋给变量myfile; 此时echo该变量,发现无法列出test文件中的内容; 调用eval命令,发现可以显示test文本中的内容。

从上面的结果可以看出,使用eval命令不但可以置换该变量,还能够执行相应的命令。第一次扫描进行了变量置换,第二次扫描执行了该字符串中所包含的命令cat test。
3.用来显示出传递给脚本的最后一个参数
在上面的脚本中,eval命令首先$$#解析为当前shell的参数个数,第二次扫描时得到最后一个参数。

运行后

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值