Sla*_*hin 5 shell bash command-substitution
这是一个反引号和 $() 行为不同的示例:
$ echo "$(echo \"test\")"
"test"
$ echo "`echo \"test\"`"
test
Run Code Online (Sandbox Code Playgroud)
我的理解是这是因为“反引号内的反斜杠 (\) 以不明显的方式处理”
但这似乎是另一回事,因为当我删除外部双引号时,结果变得相似:
$ echo $(echo \"test\")
"test"
$ echo `echo \"test\"`
"test"
Run Code Online (Sandbox Code Playgroud)
有人可以解释一下它是如何工作的以及为什么 "`echo \"test\"`" 删除双引号?
你是对的,在这种情况下是另一回事。
解决方案仍然在同一个链接中,但第二点:
$() 内的嵌套引用要方便得多。
[...]
`...` 需要在内部引号周围使用反斜杠以便可移植。
因此,
echo "`echo \"test\"`"
Run Code Online (Sandbox Code Playgroud)
不等于这个:
echo "$(echo \"test\")"
Run Code Online (Sandbox Code Playgroud)
但是这个:
echo "$(echo "test")"
Run Code Online (Sandbox Code Playgroud)
您需要将其与此进行比较:
echo "`echo \\"test\\"`"
Run Code Online (Sandbox Code Playgroud)