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