我试图找出语句为什么庆典“误的行为”:bash的化合物,如果与布尔
REG=true
VIN=false
if $REG -a $VIN; then
echo $REG $VIN
fi
运行时,它产生:
$ bash test.sh
true false
我期待什么,你能展示如何对这两个变量进行完整评估?
我试图找出语句为什么庆典“误的行为”:bash的化合物,如果与布尔
REG=true
VIN=false
if $REG -a $VIN; then
echo $REG $VIN
fi
运行时,它产生:
$ bash test.sh
true false
我期待什么,你能展示如何对这两个变量进行完整评估?
使用&&
相反在最POSIX方式:
if [[ "$REG" && "$VIN" ]]; then
echo $REG $VIN
fi
如果你想使用-a
,然后用方括号括:
if [ "$REG" -a "$VIN" ]; then
if $REG && $VIN; then
在REG=true
中,'true'是一个字符串。当您执行$REG
时,您正在执行命令true
。
if $REG -a $VIN
的意思是“运行命令true
与被真正忽视的选项‘-a’和参数‘$ VIN’。因此,它是,如果你有if true
相同
if $REG && $VIN
原因‘真’。和'false'以及他们的结果'ed',这会产生错误。
if [ "$REG" -a "$VIN" ]
不工作(这里定义的),这与if test "true" -a "false"
相同,任何非空字符串都是真的,所以这句话是真的。if [[ "$REG" && "$VIN" ]]
不过:
if [[ `$REG` && `$VIN` ]] # works
做工作,因为在这里你执行的命令真假。你会
正确方法:
if [[ $REG = 'true' && $VIN = 'true' ]]; then
echo "$REG $VIN"
fi
这是最正确的和安全的方式(与执行你$REG
和$VIN
其他答案建议)。例如,如果$REG
变量为空,会发生什么情况?或者如果它等于与true
或false
不同的东西呢?
如果你想要bash中的布尔行为,那么考虑空字符串是虚假的这一事实。
REG=1
if [[ $REG ]]; then
echo '$REG is true!'
fi
或类似的多个变量:
REG=1
VIN=''
if [[ $REG && $VIN ]]; then
echo '$REG and $VIN are true!'
fi
if [[ $REG && ! $VIN ]]; then
echo '$REG is true and $VIN is false!'
fi
所以,如果你想要的东西是false
,然后要么离开它未设置或使用空字符串。
谢谢,我从来没有看到你可以使用'&&'而不用'[['或'[' – Oz123
]它总是很棘手。我推荐阅读像http://wiki.bash-hackers.org/syntax/ccmd/conditional_expression – fedorqui
这样的页面既不是'[[“$ REG”&&“$ VIN”]]也不是'[“$ REG”-a “$ VIN”],因为它们都检查字符串“$ REG”和“$ VIN”以查看它们是否为非空 - 也就是说,它们认为“真”和“假”都为真(非空白) 。 –