【shell脚本】命令代换 ` `, $( ) ,整数运算$(( )),变量代换${ },eval命令

一、命令代换

命令代换的意识是:先完成引号里/括号里的命令行,然后将其结果替换出来,再重组成新的命令行。shell脚本里,可用于命令代换的有反引号(` `),和$()。但是,我们知道Linux下不会存在冗余的命令,既然存在两个可以实现相同作用的符号,那么它们一定有不同之处。

使用反引号的缺点如下:
1.它比较陈旧。
2.非常容易和单引号混淆。
3.它会对\进行跳脱处理。而$()不会。
这里写图片描述

我们知道,shell里的单引号会保持所有字符的字面值,所以引号里的执行结果应该是 \ 。但是用反引号输出的结果却是 \ ,这就是由于它对 \ 进行了跳脱处理。

所以,一般情况下建议使用$(),这样比较直观,但是它也有它的缺点,并不是所有的类unix系统都支持这种方式,但反引号是肯定支持的。也就是说移植性不如反引号。

二、变量代换

一般情况下,使用 ${val}与$val效果是一样的,但是前者能明确变量名的范围,不至于产生混淆。
【shell脚本】命令代换 ` `, $( ) ,整数运算$(( )),变量代换${ },eval命令_第1张图片

三、整数运算

【shell脚本】命令代换 ` `, $( ) ,整数运算$(( )),变量代换${ },eval命令_第2张图片

可以看出,我们想要执行运算得到运算结果,就必须使用 $(()),否则不会产生生结果,同时,参与运算的参数可以省略前面的$符号。

四、eval命令

功能说明:告知shell取出eval的参数,重新运算求出参数的内容。
语  法:eval [参数]
补充说明:eval可读取一连串的参数,然后再依参数本身的特性来执行。
参  数:参数不限数目,彼此之间用分号分开。
eval执行命令行前扫描两次,再次运算求出参数内容,eval是对Bash Shell命令行处理规则的灵活应用,进而构造”智能”命令实现复杂的功能。
【shell脚本】命令代换 ` `, $( ) ,整数运算$(( )),变量代换${ },eval命令_第3张图片
由于单引号会保持其内容字面值,所以直接echo打出来的就是字符串${a},但是加了命令eval后,a的值就被打出来了,原因就是上面说的,它会扫描两次,求出参数的内容。

你可能感兴趣的:(shell脚本)