在 bash 脚本中,括号符号比反引号更好吗?

在 bash 脚本中,括号符号比反引号更好吗?

当我学习编写 bash 脚本时,我使用反引号将命令的输出放在变量中,例如

ALLPDFS=`find . -name \*.\[pP\]\[dD\]\[fF\]`

但大多数“官方”脚本(在 Linux 软件包中下载的脚本)ETC.)使用带有美元符号和括号的符号:

ALLPDFS=$(find . -name \*.\[pP\]\[dD\]\[fF\])

是否有充分的理由选择其中一个而不是另一个?我猜第二个更符合其他 bash 语法。不过为了计时,我尝试了

time for (( i=0; i<10; i++ )); do  a=`find . -name \*.\[pP\]\[dD\]\[fF\]`; done
time for (( i=0; i<10; i++ )); do a=$(find . -name \*.\[pP\]\[dD\]\[fF\]); done

并且没有任何区别。也许堆栈/堆的使用效果更好?

答案1

$()当你需要嵌套时,最好使用符号,即你可以写

echo $(echo $(echo 123))

``但相当于

echo `echo \`echo 123 \``

左括号和右括号是可以区分的,因此不需要反斜杠。

相关内容