Vic*_*ell 49 unix bash shell boolean operators
是否有人可以解释之间的区别&&,||,-a,和-oUnix的运营商?
这两种类型的使用有哪些限制?
是否只是在条件中使用标志时应该使用&&和||运算符?
如:
[ "$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)
这与现代编程语言更相似,因此更具可读性.