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命令创建指向变量的“指针”。