You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Shell脚本中使用与不使用反引号`的区别是什么?附示例代码

Shell脚本中反引号`的作用与区别解析

嘿,这个问题戳中了Shell脚本里一个基础却容易踩坑的点!咱们直接结合你给出的两段代码来拆解清楚:

反引号`的本质:命令替换

反引号在Shell里是命令替换的核心语法,它的作用很直白:执行反引号包裹的命令,然后把命令的输出结果替换掉整个反引号部分——简单说就是「把命令跑一遍,拿结果当字符串用」。

两段代码的实际行为对比

第一段(使用反引号):

if [ "`/usr/bin/whoami`" != "root" ] ; then
    /bin/echo "This script must be run as root or sudo."
    exit 0
fi

Shell执行这段代码时,会优先处理反引号里的内容:

  1. 运行/usr/bin/whoami命令,得到当前登录用户的用户名(比如root用户执行就返回root,普通用户返回你的用户名)
  2. 把这个结果替换进条件判断,变成类似if [ "root" != "root" ](root用户时)或if [ "yourname" != "root" ](普通用户时)
  3. 这样就能正确判断用户身份:只有普通用户会触发提示并退出,root用户会跳过这个分支继续执行脚本。

第二段(不使用反引号):

if [ "/usr/bin/whoami" != "root" ] ; then
    /bin/echo "This script must be run as root or sudo."
    exit 0
fi

这里没有反引号,Shell会直接把"/usr/bin/whoami"当成普通字符串处理:

  • 它会直接对比字符串/usr/bin/whoami和root,这俩显然完全不相等
  • 不管你当前是不是root用户,这个条件都会成立,脚本永远会输出提示并退出,根本起不到判断用户身份的作用!

额外小提示:更推荐的命令替换写法

现在的Shell脚本里,更推荐用$()代替反引号做命令替换,比如把第一段代码改成:

if [ "$(/usr/bin/whoami)" != "root" ] ; then
    /bin/echo "This script must be run as root or sudo."
    exit 0
fi

$()的优势是支持嵌套(比如$(echo $(date +%Y))),可读性也更强;反引号在嵌套时需要转义,容易出错。不过反引号是兼容更老版本Shell的写法,所以很多旧脚本还在使用。

内容的提问来源于stack exchange,提问作者Fabio

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 12:14:07