Shell 命令替换是指将命令的输出结果赋值给某个变量。比如,在某个目录中输入 ls 命令可查看当前目录中所有的文件,但如何将输出内容存入某个变量中呢?这就需要使用命令替换了,这也是 Shell 编程中使用非常频繁的功能。
在 Shell 脚本中,命令替换可以将一个命令的输出结果作为另一个命令的参数或者变量的值。在 Bash 中,可以使用两种不同的语法进行命令替换:反斜线括号和 $()。
以下是反斜线括号语法的例子:
variable_name=`command`
例如,将系统的日期和时间赋值给变量 DATE 可以采用如下命令:
DATE=`date`
同样的,也可以使用 $() 语法实现同样的效果:
variable_name=$(command)
例如,将系统的日期和时间赋值给变量 DATE 可以采用如下命令:
DATE=$(date)
需要注意的是,在进行命令替换时,命令要放在反斜线括号或 $() 中,而括号的开头和结尾中间不能有空格。
再谈反引号和 $()
原则上讲,上面提到的两种变量替换的形式是等价的,可以随意使用;但是,反引号毕竟看起来像单引号,有时候会对查看代码造成困扰,而使用 $() 就相对清晰,能有效避免这种混乱。而且有些情况必须使用 $():$() 支持嵌套,反引号不行。
下面的例子演示了使用计算 ls 命令列出的第一个文件的行数,这里使用了两层嵌套。
#File_Lines=$(wc -l $(ls | sed -n '1p'))
# echo "$File_Lines"
36 ks.cfg
要注意的是,$() 仅在 Bash Shell 中有效,而反引号可在多种 Shell 中使用。所以这两种命令替换的方式各有特点,究竟选用哪种方式全看个人需求。