在 CentOS(以及绝大多数 Linux/Unix shell,如 bash、sh、zsh 等)中,反引号( )用于命令替换(Command Substitution)。它的作用是:先执行反引号中的命令,再将其标准输出结果替换到原位置。
下面从原理、过程和示例几个层面说明。
echo "当前时间是 `date`"
等价于:
echo "当前时间是 $(date)"
执行流程:
datedate 的标准输出(去掉末尾换行)替换回原命令行echoShell 在解析命令行时,会识别特殊字符:
` → 命令替换开始` → 命令替换结束反引号中的命令通常在一个子 shell中执行:
echo `echo -e "a\nb"`
输出:
a b
| 特性 | 反引号 ` ` |
$( ) |
|---|---|---|
| 可读性 | 差 | 好 |
| 嵌套 | 不支持或复杂 | 支持 |
| 转义 | 麻烦 | 简单 |
| 推荐度 | 旧写法 | ✅ 推荐 |
嵌套示例:
echo $(echo $(date))
反引号嵌套(不直观):
echo `echo \`date\``
IP=`hostname -I`
if [ `ps -ef | grep nginx | wc -l` -gt 1 ]; then
echo "nginx 运行中"
fi
tar zcf log_`date +%F`.tar.gz /var/log
反引号内不要有多余空格问题
A= `date` # 错误:会执行空命令
正确:
A=`date`
反引号里命令失败仍会替换
echo `false`
输出为空,但不报错
CentOS 7/8 默认 bash
$( )CentOS 中反引号的本质是:Shell 先执行反引号里的命令,再把输出结果“粘贴”回原命令行继续执行。
如果你愿意,我可以:
$( )