为什么使用括号而不是反引号来执行“原位”命令?

war*_*ren 8 bash shell-script backticks

我最近开始将我的 shell 脚本从使用反引号转移到括号来原位执行命令并在其他地方使用结果。例如:

for line in `cat file`
do
    echo "$line"
done
Run Code Online (Sandbox Code Playgroud)

现在我使用括号,替换为:

for line in $(cat file)
...
Run Code Online (Sandbox Code Playgroud)

这两种方法之间的实际区别是什么,为什么认为括号替换比反引号更好?

Fat*_*ror 14

没有功能差异,但是$()使嵌套更好,更容易遵循。考虑这个愚蠢的例子:

$ echo `echo \`echo \\\`echo foo\\\`\``
foo
Run Code Online (Sandbox Code Playgroud)

对比

$ echo $(echo $(echo $(echo foo)))
foo
Run Code Online (Sandbox Code Playgroud)

现在考虑使用一系列复杂的命令来做一些有用的事情;)。