Operations on boolean variables
在这个问题中,已经展示了如何在bash中使用整洁的布尔变量。有没有用这些变量执行逻辑操作的方法?例如,如何获得:
1 2 3 4 5 6 | var1=true var2=false # ...do something interesting... if ! $var1 -a $var2; then <--- doesn't work correctly echo"do sth" fi |
这是可行的:
1 2 3 | if ! $var1 && $var2; then echo"do sth" fi |
也许有人可以解释为什么-a和-o操作符不工作,以及&;&;,,!怎么办?
好了,孩子们,上课时间。好的。
执行此行时发生了什么?好的。
1 | if true ; then echo 1 ; fi |
这里发生的是执行
在上面的例子中,我告诉
1 | true |
它将不打印任何内容,但它将返回代码设置为
1 | if /bin/true ; then echo 1 ; fi |
这是完全等效的。好的。
总是从测试中返回true并不是很有用。通常将
1 2 | help [ man [ |
但是现在让我们假设,
1 | if [ 1 -lt 2 ] ; then echo one is less than two ; fi |
但同样,这总是正确的,所以它不是很有用。如果
1 2 3 4 5 6 7 | read -p' Enter first number: ' first read -p' Enter second number: ' second echo first: $first echo second: $second if [ $first -lt $second ] ; then echo $first is less than $second fi |
现在你可以看到,
在执行上述
1 2 3 4 5 6 7 | read -p' Enter first number: ' first read -p' Enter second number: ' second echo first: 20 echo second: 25 if [ 20 -lt 25 ] ; then echo 20 is less than 25 fi |
现在您可以看到,当执行
回到手头的问题:这里发生了什么?好的。
1 2 3 4 5 6 | var1=true var2=false if ! $var1 -a $var2 ; then echo $var1 and $var2 are both true fi |
当评估
1 | if ! true -a false ; then |
这是指示
如果您要用名为
1 2 3 4 5 6 | var1=true var2=false if ! [ $var1 -a $var2 ] ; then echo $var1 and $var2 are both true fi |
因为
1 | if ! [ true -a false ; ] then |
而
1 | if ! [ false -a yourmom ] ; then |
由于这两个字符串都是非空字符串,因此
如果用此版本替换
1 | if ! $var1 && $var2 ; then |
然后将其评估为好的。
1 | if ! true && false ; then |
处理方法如下:
我希望一切都清楚。好的。
也许值得指出的是,您可以使用如下结构:好的。
1 | ! false && true && echo 1 |
它不使用
使用
因为最初的海报没有提供一个现实的例子来说明他试图完成什么,所以很难给出任何关于最佳解决方案的具体建议。希望这已经足够有帮助了,他现在可以找到正确的事情做。好的。好啊。
这里混合了两种不同的语法。
这将起作用:
1 2 3 | if ! [ 1 -a 2 ]; then echo"do sth" fi |
注意表达式周围的括号。
您需要使用
但是,