bash脚本中back ticks和$(command)之间有什么区别?
我是否总能从这两种形式中得到相同的结果 例如:bash脚本中back ticks和$(command)之间有什么区别?,bash,Bash,我是否总能从这两种形式中得到相同的结果 例如: for i in `seq 1 10` for i in $(seq 1 10) 我从以上两个陈述中得到了相同的结果。两者的区别在于对特殊字符的处理 从手册页: 命令替换 命令替换允许命令的输出替换 命令名。有两种形式: $(command) 或 `command` Bash通过执行命令并替换 命令替换为命令的标准输出,使用 删除所有尾随的换行符。嵌入的换行符不可用 已删除,但在分词过程中可能会将其删除。命令
for i in `seq 1 10`
for i in $(seq 1 10)
我从以上两个陈述中得到了相同的结果。两者的区别在于对特殊字符的处理 从手册页: 命令替换 命令替换允许命令的输出替换 命令名。有两种形式:
$(command)
或
`command`
Bash通过执行命令并替换
命令替换为命令的标准输出,使用
删除所有尾随的换行符。嵌入的换行符不可用
已删除,但在分词过程中可能会将其删除。命令
替换$(cat文件)可以替换为等效的,但
更快的$(<文件)
当使用旧式反引号形式的替换时,反斜杠
保留其字面含义,后跟$、`或时除外。这个
第一个不带反斜杠的反引号终止命令
替代。使用$(命令)窗体时,所有字符
括号组成命令;没有人受到特殊对待。
使用$()
表单,您无需担心转义任何特殊字符。如果您有一个复杂的命令,而您只是想将其放置到位,那么这将非常有用
当您希望在命令中执行任何类型的替换时,后引号形式非常有用
以下是两种情况不同时的示例:
XXX=x1.sh
YYY=`ls -l \$XXX`
ZZZ=$(ls -l \$XXX)
echo YYY = $YYY
echo ZZZ = $ZZZ
输出:
ls:无法访问$XXX:没有这样的文件或目录
YYY=-rwxr-xr-x。1dbush dbush 94 Apr 14 23:04x1.sh
ZZZ=
我很好奇“当您想在命令中执行任何类型的替换时,反引号表单都很有用。”--您可以嵌套$(…)
,那么在$(…)
中嵌套反引号有什么特殊的好处呢?我猜你指的是,例如,$(sed's/`stuff/`other/')
?否则,普遍的共识似乎是“应该避免使用后引形式;使用新语法。”