在 CentOS(以及大多数 Linux/Unix shell,如 bash)中,反引号(`)和美元号加小括号($())都用于命令替换(Command Substitution),也就是“先执行里面的命令,再把输出结果替換到当前位置”。
下面从功能、写法、兼容性、嵌套、可读性几个方面说明它们的区别。
两者作用一样:执行命令并替换结果。
echo `date`
echo $(date)
效果相同,都会输出当前日期。
result=`ls -l`
$()(推荐写法)result=$(ls -l)
✅ $() 更清晰,尤其命令较长时。
echo `echo \`date\``
需要转义,容易出错。
$() 嵌套很简单echo $(echo $(date))
✅ $() 支持自然嵌套
反引号里:
\ 有时会被解释$() 里:
示例:
echo `echo \$HOME`
echo $(echo \$HOME)
结果可能不同,取决于 shell。
| 写法 | 兼容性 |
|---|---|
| 反引号 | 所有 Unix / 老 shell |
$() |
POSIX 标准,bash / sh / zsh 都支持 |
✅ CentOS 的 bash 完全支持 $()
✅ 推荐使用 $()
❌ 反引号只建议:
# 反引号
files=`ls | grep log`
# 推荐
files=$(ls | grep log)
在 CentOS 中,
$()是反引号的现代替代品,功能相同但更安全、更好用。
如果你愿意,我也可以讲 变量替换 $VAR 和命令替换 $() 的区别。