温馨提示×

CentOS反引号区别是什么

小樊
33
2026-08-04 20:31:36
栏目: 智能运维

CentOS(以及绝大多数 Linux/Unix Shell) 中,反引号(`)$() 都用于 命令替换(command substitution),但它们有一些区别和注意事项。下面详细说明。


一、反引号是什么?

反引号(`)用于 把命令的执行结果替换到当前位置

echo `date`

等价于:

echo $(date)

执行流程:

  1. Shell 先执行 date
  2. 把输出结果替换到原位置
  3. 再执行 echo

二、反引号 vs $() 的区别

1️⃣ 可读性和嵌套能力(最重要)

$() 更易读、支持嵌套

echo $(ls $(pwd))

❌ 反引号嵌套很麻烦

echo `ls \`pwd\``

反引号嵌套时 必须转义,可读性很差。

结论推荐优先使用 $()


2️⃣ 转义规则不同(容易踩坑)

反引号中 \ 的行为更复杂

echo `echo \$HOME`

echo $(echo \$HOME)

在某些情况下结果不同,尤其是涉及:

  • 反斜杠
  • 双引号
  • 变量替换时

➡️ $() 的规则更统一、更符合直觉。


3️⃣ 可移植性

  • ✅ 反引号:
    几乎所有 Shell 都支持(非常老的系统也能用)
  • $()
    POSIX 标准支持,但在 极老的 /bin/sh(如某些 Solaris) 中可能不支持

CentOS 7 / 8 / Stream 中:

  • bash ✅
  • sh ✅
  • $() 完全没问题

4️⃣ 实际示例对比

DATE1=`date +%F`
DATE2=$(date +%F)

两者效果一样,但:

FILE=`ls *.log | head -n1`
FILE=$(ls *.log | head -n1)

✅ 后者更安全、清晰


三、CentOS 中常见误区

❌ 把反引号当引号用

echo `hello`

如果 hello 不是命令,会报错:

command not found

✅ 字符串请用单引号或双引号:

echo 'hello'

四、什么时候用反引号?

✅ 可以用的场景:

  • 维护老脚本
  • 兼容极老系统

❌ 新脚本不建议使用


五、总结(重点)

对比项 反引号 `cmd` $(cmd)
功能 命令替换 命令替换
可读性 ✅ 好
嵌套 麻烦 ✅ 简单
转义 复杂 ✅ 简单
推荐程度 ❌ 不推荐 ✅ 强烈推荐

✅ CentOS 官方和社区共识

新脚本一律使用 $(),不要用反引号

如果你愿意,我也可以帮你 把一段反引号脚本改成 $() 风格,或者解释某个具体报错。

0