在 CentOS(以及其它 Linux 发行版、bash 环境中),反引号(`)用于命令替换,例如:
echo `date`
但反引号容易出错,也不推荐在新脚本中使用。下面从「常见错误」和「正确做法」两方面说明如何避免问题。
echo `echo `date``
❌ 错误:反引号不能方便嵌套
✅ 正确写法(用 $()):
echo $(echo $(date))
echo '当前时间:`date`'
❌ 单引号中反引号不会执行
✅ 正确写法:
echo "当前时间:$(date)"
result=`ls | grep *.log`
可能因为 * 或空格导致意外结果
✅ 更安全:
result=$(ls | grep '*.log')
`date` # 正确
'date' # 只是字符串
键盘布局或复制粘贴容易出错
$() 代替反引号 ✅# 不推荐
files=`ls \`pwd\``
# 推荐
files=$(ls $(pwd))
$()#!/bin/bash
now=$(date)
echo "现在时间是 $now"
result=$(ls /var/log)
echo "$result"
if ! command -v date >/dev/null; then
echo "date 命令不存在"
fi
shellcheck script.sh
它会提示反引号问题并建议 $()
| 方式 | 是否推荐 | 说明 |
|---|---|---|
反引号 `cmd` |
❌ | 易错、难维护 |
$() |
✅ | 安全、清晰、可嵌套 |
在 CentOS 中避免使用反引号,统一使用 $() 是最简单有效的防错方式。
如果你有具体报错命令,我可以帮你逐条分析。