“与$()
shell命令替换:
命令替换与变量替换差不多,都是用来重组命令行的,先完成引号里的命令行,然后将其结果替换出来,再重组成新的命令行。
shell中命令替换符有两种``
与$()
例:
date=1
echo $(date)
DATE=`date`
echo $(DATE)
两者都起到了同样的效果,都是起到命令替换的作用。
但是,两者还是有细微的不同。
1.``
反单引号适用于任何类unix平台,他的适用性比较高。但是$符号却不是。
2.在初期学习的时候反单引号``
容易造成视觉误差。
3.在多层次的复合替换中``
之间需要反斜线()处理,但是$()就比较直观。
例
date3的结果作为date2的参数,再将此结果作为参数传给date1
date1 $(date2 $(date3))
如果用``则表示为
date1 `date2\ `date3\``
很明显$()更直观。
eval命令
eval命令将会首先扫描命令行进行所有的置换,然后再执行该命令。
该命令对变量进行两次扫描。这些需要进行两次扫描的变量有时被称为复杂变量。不过这些变量本身并不复杂。
1.该变量可以执行含有字符串的命令
例如
首先创建一个test文件,并给此文件写一些简单地文本。
接着将test赋给myfile,现在echo myfile,我们发现只能显示出cat test并不能显示出test内的内容。但是当我们执行eval echo myfile就能显示出test内的内容。
结论:
从上面的结果可以看出,使用eval命令不但可以置换该变量,还能够执行相应的命令。第一次扫描进行了变量置换,第二次扫描执行了该字符串中所包含的命令cat test。
2.该命令可以显示传递给脚本的最后一条命令
在上面的脚本中, eval命令首先把 #解析为当前shell的参数个数,然后在第二次扫描时得出最后一个参数。
3.给每个值一个变量名
希望该文件中的第一列成为变量名,第二列成为该变量的值,这样就可以写: