命令代换

来源:互联网 发布:堆和栈的区别java 编辑:程序博客网 时间:2024/05/09 18:32

1.“和$()

由反单引号“括起来的也是一条命令,Shell先执行该条命令,然后输出结果立刻代换到当前命令行中。

date +%Y:%m:%d                                                              echo "today is `date +%Y:%m:%d`"

而命令代换也可以用$()表示。

date +%Y:%m:%d       echo "today is $(date +%Y:%m:%d)"

我们在用shell编程时,经常用到将系统命令的执行结果赋给一个变量,然后输出:

mydate=$(date +%Y:%m:%d)                                                    echo $mydate

或者这样也可以:

mydate=`date +%Y:%m:%d`echo $mydate

2.“和$() 的区别

(1)反单引号内不能再引用反单引号,而()2()用起来简洁,反单引号易容易混淆;
(3)多层结构的替换中,反单引号需要/处理,写起来较麻烦;
(4)反单引号基本上在Shell中使用,移植性较高,$()不是。

3. eval命令

概念:
eval命令首先扫描命令行进行所有的置换,然后再执行该命令。该命令适用于那些一次扫描无法实现其功能的变量,可以对变量进行两次扫描。这些需要进行两次扫描的变量有时被称为复杂变量,不过这些变量本身并不复杂。

功能:
(1)eval命令也可以用于回显简单变量,不一定是复杂变量。

这里写图片描述

(2)执行含有字符串的命令。
①首先,创建一个“test”文件,在这个文件中输入文本信息:

hello!I'm yaoyao! 

②cat该“test”文件:

这里写图片描述

③将cat test赋给变量“myfile”,如果echo该变量,我们将无法列出“test” 文件中的内容。

这里写图片描述

④若改为eval命令将会对该变量进行两次扫描。

这里写图片描述

(3)显示出传递给脚本的最后一个参数。

eval echo \$$#  //取得最后一个参数

(4)eval命令创建指向变量的“指针”。