Shell脚本变量赋值时||运算符的作用及执行逻辑是什么?
Shell 脚本中
||运算符在赋值场景下的工作原理 Shell 中的||是短路逻辑或运算符,核心执行规则为:仅当||左侧的命令/语句执行后退出码不为0(Shell 约定退出码0代表执行成功,非0代表执行失败)时,才会执行||右侧的语句,否则右侧语句会被直接跳过不执行。
目标代码行运行逻辑拆解
你标注的代码行:
output=`ufw_start` || error="$?"
运行时按以下顺序处理:
- 首先执行
ufw_start函数,将函数运行时输出到标准输出的所有内容赋值给output变量,同时记录ufw_start执行结束后的退出码 - 判断上一步获取的退出码:
- 若退出码为0(
ufw_start执行成功):||右侧的error="$?"语句直接被跳过,不会执行,此时error变量保留执行这行代码之前的取值,若此前未定义过error,则值为空 - 若退出码非0(
ufw_start执行失败):才会执行右侧的赋值操作,$?取的就是刚才ufw_start返回的非0退出码,赋值给error变量
- 若退出码为0(
补充说明
你贴出的完整代码存在逻辑漏洞:如果ufw_start执行成功,error不会被赋值为0,后续的if [ "$error" = "0" ]判断会因为error为空而不符合条件,不会执行内核变量设置的逻辑。正确的写法可以直接判断命令退出码,或者将error赋值操作放在||之外。
常见使用场景
||常被用于做错误兜底处理,示例:
# 若创建目录失败,直接打印错误并退出脚本 mkdir /data/custom || { echo "创建目录失败"; exit 1; }
内容的提问来源于stack exchange,提问作者rgo1991
相关产品推荐
相关产品推荐

