温馨提示×

为何CentOS要用反引号呢

小樊
33
2026-08-04 20:24:34
栏目: 智能运维

这是一个历史原因 + 兼容性问题,不是 CentOS 独有的,而是 Shell(尤其是 sh/bash)决定的


一、反引号是什么?

在 Linux Shell 中:

`command`

表示命令替换(Command Substitution),即:

先执行命令,再把输出结果替换到当前位置

例如:

echo "今天是 `date`"

等价于:

echo "今天是 $(date)"

二、为什么 CentOS 里常见反引号?

1️⃣ 历史原因(最主要)

  • 反引号是 最早的 Bourne Shell(sh) 就支持的语法
  • $(...) 是后来才加入的(POSIX 标准)

CentOS 的历史脚本很多写于 20 年前,当时:

  • $(...) 不一定可用
  • 反引号是唯一选择

所以大量老脚本、教程、系统脚本都沿用了反引号。


2️⃣ 系统启动脚本(init / sysvinit)

CentOS 6 及以前大量使用:

result=`ls`

而不是:

result=$(ls)

很多系统脚本为了 最大兼容性,仍然保留反引号。


3️⃣ 教学、文档惯性

很多教程、书籍、运维文档:

  • 直接复制老脚本
  • 没有刻意改成 $(...)

导致反引号在 CentOS 社区中非常常见。


三、反引号 vs $(...) 对比

特性 反引号 `cmd` $(cmd)
可读性 ✅ 好
可嵌套 很难 ✅ 支持
POSIX ✅ 是 ✅ 是
推荐程度 ❌ 不推荐 ✅ 强烈推荐

嵌套示例

❌ 反引号(难看且容易错):

echo `echo \`date\``

$(...)(清晰):

echo "$(echo "$(date)")"

四、CentOS 现在有区别吗?

没有本质区别

  • CentOS 7 / 8 / Stream 默认 shell 是 bash
  • bash 完全支持 $(...)
  • 反引号只是为了兼容老代码

新脚本强烈建议用 $(...)


五、什么时候还能看到反引号?

  • 老系统维护
  • 二进制软件自带的 shell 脚本
  • 某些自动化部署模板
  • 运维老脚本(10 年+)

六、一句话总结

CentOS 用反引号不是因为它更好,而是因为它更老。

如果你愿意,我可以帮你:

  • 把一段反引号脚本改成现代写法
  • 解释某个具体脚本里的反引号含义
  • 讲清楚 bash / sh / dash 的区别

0