我能否始终期望这两种形式获得相同的结果?
例如:
for i in `seq 1 10`
for i in $(seq 1 10)
我从上述两个陈述中得到了相同的结果。
答案 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 =