linux中&&和||的区别

写在前面

       今天看到linux书籍介绍&&和||的区别时,说&&把两个命令连接在一起时,只有当第一个命令成功时(即返回值为0)才运行第二个命令。而||把两个命令连接在一起时,只有当第一个命令不成功时(即返回值为非0)才运行第二个命令。当时想了一会原因直接想懵了,我想着使用&&时,返回值为0了,就可以直接判断&&的结果了,所以第二条命令不会执行,结果是返回值为0了才要执行第二条命令。上网搜索了原因才知道是自己想岔了。

&&执行过程

语法格式如下:

command1 && command2 [&& command3 ...] 

       当使用&&连接两条命令时,正确的运行过程是第一条命令执行成功后,然后执行第二条命令。第一条命令执行成功之后,返回值是0,但是第一条命令的返回值不是&&的比较值,而是让第一条命令的返回值与0进行比较(即$? == 0)的结果作为&&的比较值。第一条命令执行成功时,$? == 0的结果为True,还无法确定&&的最终结果,所以还需要执行第二条命令才能知道&&的最终结果。当第一条命令执行不成功(即返回值非0),$? == 0的结果为False,所以对于&&来说发生短路,&&的最终结果就是指令执行成功,第二条指令才会执行。
       &&的使用应该是连接那些逻辑上具有顺序关系的命令,例如只有当成功创建一个文件夹时,才可以进入文件夹并进行相关操作,如果失败就不要进入文件夹了。

mkdir new && cd new

||执行过程

语法格式如下:

command1 || command2 [|| command3 ...] 

       而当使用||连接两条命令时,正确的运行过程是第一条命令执行失败后,然后执行第二条命令。第一条命令执行失败之后,返回值为非0,$? == 0的结果为False,还无法知道||的最终结果,所以还需要执行第二条命令才能知道||的最终结果。当第一条命令执行成功(即返回值为0),$? == 0的结果为True,所以对于||来说发生短路,||的最终结果就是指令执行成功,第二条指令不执行。
       ||适用于那些可替换命令的连接,例如如果删除一个文件夹,事先不知道文件夹中有内容,那么会删除失败,如果此时在||右边使用强制删除选项,那么文件夹一定能删除。

rm new || rm -rf new

linux部分符号的用法

符号说明
&让命令在后台运行
|管道
&&当前面的命令执行成功时,后面的命令才会执行
||当前面的命令执行成功时,后面的命令不再执行
>标准输出重定向(文件存在先删除文件,然后写入内容,不存在则创建)
>>标准输出重定向(在文件最后添加)
2>标准错误重定向
<标准输入重定向
2>>标准错误重定向(在文件最后添加)
&>标准输出、标准错误重定向
;什么也不做,返回值为0

       linux中符号太多了,符号之间相互组合又有不同的含义,全都记住也不太可能,还是要多靠平时的积累。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值