在 CentOS(以及其他 Linux 发行版)里,反引号(``)本身一直是支持命令替换的,所谓“不解析”通常不是 shell 不支持,而是使用场景或写法有问题。下面按常见原因给你梳理一下。
例如:
#!/bin/sh
echo `date`
如果文件没有执行权限,或你用:
python test.sh
那当然不会解析反引号。
✅ 正确方式:
chmod +x test.sh
./test.sh
echo '当前时间是 `date`'
❌ 单引号 会阻止一切解析,包括反引号
✅ 改成双引号:
echo "当前时间是 `date`"
echo \`date\`
输出会是:
`date`
✅ 去掉反斜杠即可
例如:
crontabsystemd ExecStartMakefilesudo 命令这些环境 默认不会启用完整 shell 解析
* * * * * echo `date` >> /tmp/log
❌ cron 不会按你期望解析
✅ 改成:
* * * * * /bin/bash -c 'echo `date` >> /tmp/log'
$() 替代反引号现代 shell 更推荐:
echo "当前时间是 $(date)"
优点:
echo "$(echo $(date))"
反引号嵌套非常痛苦:
echo `echo \`date\``
echo $SHELL
CentOS 默认通常是:
/bin/bash如果你在用 dash、sh 某些精简环境,反引号仍支持,但 $() 更安全。
| 情况 | 是否解析 |
|---|---|
| 双引号中 | ✅ |
| 单引号中 | ❌ |
被 \ 转义 |
❌ |
| crontab 中 | ❌(需 bash -c) |
| Makefile 中 | ❌(需 shell) |
| 正常 bash 交互 | ✅ |
如果你愿意,可以把你具体不解析的命令或脚本贴出来,我可以直接帮你指出是哪一步导致没解析。