Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
bash脚本中back ticks和$(command)之间有什么区别?_Bash - Fatal编程技术网

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/')
?否则,普遍的共识似乎是“应该避免使用后引形式;使用新语法。”