在 CentOS(以及绝大多数 Linux/Unix Shell) 中,反引号(`) 和 $() 都用于 命令替换(command substitution),但它们有一些区别和注意事项。下面详细说明。
反引号(`)用于 把命令的执行结果替换到当前位置:
echo `date`
等价于:
echo $(date)
执行流程:
dateecho$() 的区别$() 更易读、支持嵌套echo $(ls $(pwd))
echo `ls \`pwd\``
反引号嵌套时 必须转义,可读性很差。
✅ 结论:推荐优先使用 $()
\ 的行为更复杂echo `echo \$HOME`
和
echo $(echo \$HOME)
在某些情况下结果不同,尤其是涉及:
➡️ $() 的规则更统一、更符合直觉。
$():在 CentOS 7 / 8 / Stream 中:
$() 完全没问题DATE1=`date +%F`
DATE2=$(date +%F)
两者效果一样,但:
FILE=`ls *.log | head -n1`
FILE=$(ls *.log | head -n1)
✅ 后者更安全、清晰
echo `hello`
如果 hello 不是命令,会报错:
command not found
✅ 字符串请用单引号或双引号:
echo 'hello'
✅ 可以用的场景:
❌ 新脚本不建议使用
| 对比项 | 反引号 `cmd` | $(cmd) |
|---|---|---|
| 功能 | 命令替换 | 命令替换 |
| 可读性 | 差 | ✅ 好 |
| 嵌套 | 麻烦 | ✅ 简单 |
| 转义 | 复杂 | ✅ 简单 |
| 推荐程度 | ❌ 不推荐 | ✅ 强烈推荐 |
新脚本一律使用
$(),不要用反引号
如果你愿意,我也可以帮你 把一段反引号脚本改成 $() 风格,或者解释某个具体报错。