Vic*_*ell 49 unix bash shell boolean operators
是否有人可以解释之间的区别&&
,||
,-a
,和-o
Unix的运营商?
这两种类型的使用有哪些限制?
是否只是在条件中使用标志时应该使用&&
和||
运算符?
如:
[ "$1" = "yes" ] && [ -r $2.txt ]
Run Code Online (Sandbox Code Playgroud)
与:
[ "$1" = "yes" -a $2 -lt 3 ]
Run Code Online (Sandbox Code Playgroud)
Joh*_*ica 123
经验法则:使用-a
和-o
方括号内侧&&
和||
外侧.
理解shell语法和[
命令语法之间的区别非常重要.
&&
并且||
是shell运营商.它们用于组合两个命令的结果.因为它们是shell语法,所以它们具有特殊的语法意义,不能用作命令的参数.
[
不是特殊的语法.它实际上是一个名称命令[
,也称为test
.因为[
它只是一个常规命令,所以它使用-a
和-o
它和和或运算符.它不能使用&&
,||
因为那些是命令无法看到的shell语法.
可是等等!Bash的形式有更好的测试语法[[ ]]
.如果使用双方括号,则可以访问诸如正则表达式和通配符之类的内容.您也可以使用shell运营商如&&
,||
,<
,和>
自由的括号内,因为不像[
,双括号的形式是特殊的shell语法.Bash解析[[
自己,所以你可以写出类似的东西[[ $foo == 5 && $bar == 6 ]]
.
Bra*_*nam 15
-a和-o是test命令的较旧和/或运算符.&&和|| 是和/或shell的运算符.所以(假设旧壳)在你的第一种情况下,
[ "$1" = 'yes' ] && [ -r $2.txt ]
Run Code Online (Sandbox Code Playgroud)
shell正在评估和条件.在你的第二个案例中,
[ "$1" = 'yes' -a $2 -lt 3 ]
Run Code Online (Sandbox Code Playgroud)
测试命令(或内置测试)正在评估和条件.
当然,在所有现代或半现代的shell中,test命令都内置在shell中,所以实际上并没有任何区别.在现代shell中,if语句可以写成:
[[ $1 == yes && -r $2.txt ]]
Run Code Online (Sandbox Code Playgroud)
这与现代编程语言更相似,因此更具可读性.
归档时间: |
|
查看次数: |
136727 次 |
最近记录: |