bash脚本中的back ticks和$(command)有什么区别?

时间:2018-04-15 02:41:31

标签: bash

我能否始终期望这两种形式获得相同的结果?

例如:

for i in `seq 1 10`
for i in $(seq 1 10)

我从上述两个陈述中得到了相同的结果。

1 个答案:

答案 0 :(得分:1)

两者之间的区别在于对特殊字符的处理。

从手册页:

  

命令替换

     

命令替换允许输出命令来替换   命令名称。有两种形式:

      $(command)    
     

      `command`
     

Bash通过执行命令并替换来执行扩展   使用命令的标准输出命令替换   删除任何尾随新行。嵌入式换行不是   已删除,但在分词时可能会将其删除。命令   替换$(cat文件)可以替换为等效的但是   更快$(< file)。

     

当使用旧式反引号替换形式时,反斜杠   保留其字面含义,除非后跟$,`或者。该   第一个反引号前面没有反斜杠会终止命令   代换。使用$(命令)表单时,所有字符之间   括号组成命令;没有特别处理。

使用$()表单,您无需担心转义任何特殊字符。如果您有一个复杂的命令,您只想放置它,这将非常有用。

当你想在命令中进行任何类型的替换时,反引号表格很有用。

以下是两者不同的例子:

XXX=x1.sh

YYY=`ls -l \$XXX`
ZZZ=$(ls -l \$XXX)

echo YYY = $YYY
echo ZZZ = $ZZZ

输出:

ls: cannot access $XXX: No such file or directory
YYY = -rwxr-xr-x. 1 dbush dbush 94 Apr 14 23:04 x1.sh
ZZZ =