登录
/
注册
首页
论坛
其它
首页
科技
业界
安全
程序
广播
Follow
关于
博客
发1篇日志+1圆
记录
发1条记录+2圆币
发帖说明
登录
/
注册
账号
自动登录
找回密码
密码
登录
立即注册
搜索
搜索
关闭
CSDN热搜
程序园
精品问答
技术交流
资源下载
本版
帖子
用户
软件
问答
教程
代码
VIP网盘
VIP申请
网盘
联系我们
道具
勋章
任务
设置
我的收藏
退出
腾讯QQ
微信登录
返回列表
首页
›
业界区
›
安全
›
Bash中; && ||命令连接符不是逻辑连接符、多个命令的执 ...
Bash中; && ||命令连接符不是逻辑连接符、多个命令的执行顺序
[ 复制链接 ]
啪炽
2025-6-11 14:01:11
Bash中; && ||命令连接符不是逻辑连接符、多个命令的执行顺序
在Shell的Bash语言中,; && ||三个符号用于分隔命令,根据前一个命令的执行状态,按顺序执行后面的命令。它们形似逻辑运算符,但其实不是
逻辑运算符
,而是
命令连接符
。
基础知识
【重要】每个命令执行后都有进程退出状态码,下面简称退出状态码(Exit Status)。为0则表示命令成功执行。非0则表示命令执行失败。
具体是多少,由该命令对退出状态码指定。
echo命令没有特殊情况,退出状态码通常是0(因为几乎总是成功执行)。
;(
分号
)用于分隔多个命令,按顺序执行这些命令,无论前一个命令执行成功与否。如在命令行中敲入echo "Hello"; echo "World",按下回车,会输出Hello,同时换行输出World。
&&(
AND连接符
)分隔多个命令,只有前一个命令
退出状态码为零
(
即执行成功
),就会执行下一条命令。
||(
OR连接符
)分隔多个命令,只有前一个命令
退出状态码非零
(
即执行失败
),才会执行下一条命令。
注意:
&&和||作用的范围是下一条命令,不是整行命令
;如果有一行命令序列中有多条命令,如果下一条命令不能执行,不代表下下条命令不能执行。
如果退出状态码非零(即执行失败),在命令行中会打印错误信息,但并不意味着整行命令停止运行。
没有优先级
在Bash语言中,作为
命令连接符
,
; && ||并没有优先级
。
具体到执行上,
如果没有括号,永远是从左往右执行
。
但是&& ||在退出状态码上,&&与||有逻辑连接符的特征:A&&B时,只有A和B退出状态码都为0,整体的退出状态码才是0。A||B时,如果A和B的退出状态码有一个是0,整体的退出状态码就是0。
学过Java的同学会有认识:(2>5 && 1235时,就可以忽略后面两条直接判定false了;在shell命令中,(A&&B&&C)也一样,只要A出错了,整体的退出状态码就是非0。(也可类比(A||B||C))
命令序列的执行顺序
在判断某一行由许多命令由命令连接符组成的命令序列的执行顺序时,我们需要如下操作:
(请结合例子动笔写下关键的推理过程)
有括号优先处理括号。
然后从左往右看,
每次执行命令后,留意退出状态码与接下类的命令连接符
。
满足以下条件之一的,继续执行下面的命令,返回第2条:
命令连接符是;
命令连接符是&&且退出状态码为0
命令连接符是||且退出状态码为非0
满足以下条件之一的,执行第4条:
命令连接符是&&且退出状态码为非0
命令连接符是||且退出状态码为0
将命令连接符连起来的两条命令外围扩上一层小括号,例如(A ; B)/(A && B)/(A || B),判断小括号内的退出状态码
:
如果最终B不执行,返回A的退出状态码
如果最终B执行了,返回B的退出状态码
说人话:B不执行,只要A失败了,整条命令就失败了;B执行了,管他A怎么鸟样,只要B失败了,整条命令就失败了。其余情况整条命令都是成功的。
然后返回第2条,直到所有的命令都执行完毕。
例如:下面的例子中,很多人会误以为不会输出任何东西,但实际上会输出bb。
true || echo aa && echo bb
复制代码
分析:
true不会执行任何操作,返回退出状态码0。后方命令连接符是||,所以echo aa不会执行。
然后分析(true || echo aa)&& echo bb,因为echo aa不执行,所以返回true这条命令的退出状态码。因为退出状态码为0,所以(true || echo aa)整条命令的退出状态码为0。
然后分析&& echo bb,因为&&且退出状态码为0,所以执行echo bb,打印bb,退出状态码还是0。
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复
使用道具
举报
提升卡
置顶卡
沉默卡
喧嚣卡
变色卡
千斤顶
照妖镜
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
立即注册
回复
本版积分规则
回帖并转播
回帖后跳转到最后一页
浏览过的版块
业界
签约作者
程序园优秀签约作者
发帖
啪炽
2025-6-11 14:01:11
关注
0
粉丝关注
13
主题发布
板块介绍填写区域,请于后台编辑
财富榜{圆}
敖可
9984
黎瑞芝
9990
杭环
9988
4
猷咎
9988
5
凶契帽
9988
6
接快背
9988
7
氛疵
9988
8
恐肩
9986
9
虽裘侪
9986
10
里豳朝
9986
查看更多