当我学习编写 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 \``
左括号和右括号是可以区分的,因此不需要反斜杠。