在 bash 脚本中,括号表示法比反引号更好吗?

all*_*ije 1 linux bash command-line brackets

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

ALLPDFS=`find . -name \*.\[pP\]\[dD\]\[fF\]`
Run Code Online (Sandbox Code Playgroud)

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

ALLPDFS=$(find . -name \*.\[pP\]\[dD\]\[fF\])
Run Code Online (Sandbox Code Playgroud)

有充分的理由选择其中之一吗?我猜第二个更符合其他 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
Run Code Online (Sandbox Code Playgroud)

这没有任何区别。也许有一种更适合堆栈/堆使用吗?

cho*_*oba 5

$()当您需要嵌套它时,首选表示法,即您可以写

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

``但相当于

echo `echo \`echo 123 \``
Run Code Online (Sandbox Code Playgroud)

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