在 CentOS(以及一般的 Linux/Shell 环境中),反引号(` `)用于命令替换(command substitution),即把命令的输出结果替换到当前位置。
today=`date +%Y-%m-%d`
echo "今天是 $today"
等价于:
today=$(date +%Y-%m-%d)
echo "今天是 $today"
$(...) 而不是反引号这是目前最推荐的做法。
原因:
✅ 推荐:
files=$(ls $(pwd))
❌ 不推荐(嵌套难读且易错):
files=`ls \`pwd\``
在以下情况可以使用反引号:
$())新写的 CentOS 脚本(CentOS 7/8/Stream)不建议使用反引号。
反引号内部如果需要再使用反引号,必须转义:
result=`echo \`date\``
而 $(...) 不需要:
result=$(echo $(date))
❌ 不推荐:
if [ `ps aux | grep nginx | wc -l` -gt 0 ]; then
✅ 更好:
if pgrep nginx > /dev/null; then
在 CentOS 脚本开头指定:
#!/bin/bash
而不是:
#!/bin/sh
因为 sh 在某些 CentOS 版本中是 dash,对 $() 支持不如 bash 完善。
| 项目 | 建议 |
|---|---|
| 新脚本 | ✅ 使用 $(...) |
| 老脚本维护 | ⚠️ 可保留反引号 |
| 嵌套命令 | ❌ 反引号,✅ $() |
| 可读性 | ✅ $() 更清晰 |
| 兼容性 | 反引号略好(仅老系统) |
如果你愿意,我可以帮你把一个使用反引号的 CentOS 脚本改写成现代最佳实践版本。