` `和$()之间的区别:
在bash中,$( )与` `(反引号)都是用来作命令替换的。
命令替换与变量替换差不多,都是用来重组命令行的,先完成引号里的命令行,然后将其结果替换出来,再重组成新的命令行。
两个命令达到的效果相同,但建议使用$(),理由如下:
- 1、``很容易与‘‘搞混乱,尤其对初学者来说。
2、在多层次的复合替换中,``必须要额外的跳脱处理(反斜线),而$( )比较直观。
$( )的弊端是,并不是所有的类unix系统都支持这种方式,但反引号是肯定支持的。
两者的区别我们通过例子来看:
通过例子可以看出:
- 反引号中\$并没有将$的特殊意义转换 反引号包含的内容 echo \$hostname 仍然被解释为一个echo $HOSTNAME 取到了这个变量的值并输出。
- $()则正好相反,$明显被\转义成了一个普通字符,所以并没有取到变量值,而是返回了字符串本身的意思,故而返回了$HOSTNAME。
- 结论:
反引号齐本身就对\进行了转义,保留了齐本身意思,如果我们想在反引号中起到\的特殊意义,我们必须使用2个\来进行表示。$()中则不需要考虑\的问题,与我们平常使用的一样。
eval指令:
eavl命令将会首先扫描命令行进行所有的置换,然后再执行该命令。该命令适用于那些一次扫描无法实现其功能的变量。该命令对变量进行两次扫描。这些需要进行两次扫描的变量有时被称为复杂变量。不过这些变量本身并不复杂。该命令也可以用于回显简单变量,不一定是复杂变量。
1、eval命令也可以用于回显简单变量,不一定是复杂变量。
2、执行含有字符串的命令。
首先我们首先创建一个名为test的文件,在这个文件中含有一些文本。接着,将cat test赋给变量file,现在我们echo该变量,看看是否能够执行上述命令。
从上面的结果可以看出,使用eval命令不但可以置换该变量,还能够执行相应的命令。第
一次扫描进行了变量置换,第二次扫描执行了该字符串中所包含的命令cat test。
3、显示出传递给脚本的最后一个参数。
4、给每个值一个变量名。
eval "${NAME}=${VALUE}"
时间: 2024-10-08 09:45:07