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

shell脚本中相关命令剖析

时间:2016-08-09 00:30:01      阅读:307      评论:0      收藏:0      [点我收藏+]

标签:shell 命令

` `和$()之间的区别:

在bash中,$( )与` `(反引号)都是用来作命令替换的。
命令替换与变量替换差不多,都是用来重组命令行的,先完成引号里的命令行,然后将其结果替换出来,再重组成新的命令行。

两个命令达到的效果相同,但建议使用$(),理由如下:

  • 1、``很容易与‘‘搞混乱,尤其对初学者来说。

    2、在多层次的复合替换中,``必须要额外的跳脱处理(反斜线),而$( )比较直观。

$( )的弊端是,并不是所有的类unix系统都支持这种方式,但反引号是肯定支持的。

两者的区别我们通过例子来看:

技术分享

通过例子可以看出:

  1. 反引号中\$并没有将$的特殊意义转换 反引号包含的内容 echo \$hostname 仍然被解释为一个echo $HOSTNAME 取到了这个变量的值并输出。

  2. $()则正好相反,$明显被\转义成了一个普通字符,所以并没有取到变量值,而是返回了字符串本身的意思,故而返回了$HOSTNAME。

  3. 结论:

反引号齐本身就对\进行了转义,保留了齐本身意思,如果我们想在反引号中起到\的特殊意义,我们必须使用2个\来进行表示。$()中则不需要考虑\的问题,与我们平常使用的一样。

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脚本中相关命令剖析

标签:shell 命令

原文地址:http://luminous.blog.51cto.com/10797288/1835910

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