在 CentOS(以及其它 Linux/Unix shell,如 bash)里,反引号(` `)和 美元符号加小括号($( )) 都用来做命令替换(command substitution),但有一些重要区别。
两者都是:先执行里面的命令,再把输出结果替换到当前位置
echo `date`
echo $(date)
上面两条命令效果基本一样,都会输出当前时间。
result=`ls -l`
echo `echo \`date\``
很容易写错,且不同 shell 行为不一致。
$( )(推荐写法)result=$(ls -l)
echo $(echo $(date))
$() 对比表| 对比项 | 反引号 ` ` | $( ) |
|---|---|---|
| 是否推荐 | ❌ 不推荐 | ✅ 推荐 |
| 嵌套支持 | ❌ 不支持 | ✅ 支持 |
| 可读性 | 差 | 好 |
| 转义复杂度 | 高 | 低 |
| 标准 | 老 shell | POSIX |
✅ CentOS(bash)中一律推荐使用 $( )
# 推荐
now=$(date +%F)
# 不推荐
now=`date +%F`
$ 本身不是命令替换
$var 是变量$( ) 才是命令替换如果你愿意,我也可以讲:
$() 在脚本中的实战用法