我尝试使用 bash,甚至尝试了文档和一些线程,尽管我似乎无法正确处理。
S=(true false)
if (( ${S[0]} || ${S[1]} ))
then
echo "true"
else
echo "false"
fi
- 如何在 bash 下评估布尔表达式?(有没有机会修复上面的代码片段?)
- 是否有可能在没有 的情况下对其进行评估
if
,即直接将其分配给变量(如果没有操作)?
而不是S=(true false)
,您需要像这样创建数组:
S=(1 0)
然后这个 if 块:
if (( ${S[0]} || ${S[1]} ))
then
echo "true"
else
echo "false"
fi
将输出:
真的
请注意,真/假在 BASH 中被视为文字字符串“真”和“假”。
bash 中没有真正的布尔值,只有整数算术表达式,例如 (( n )),如果其值大于 1,它将返回退出代码 0(无错误或无故障代码),或者如果计算结果为 0,则非零代码(具有错误代码)。如果它调用的命令返回 0 退出代码,则if
语句执行块,否则在块上执行。您可以像这样在 bash 中模仿布尔系统:then
else
#!/bin/bash
true=1
false=0
A=true
B=false
# Compare by arithmetic:
if (( A || B )); then
echo "Arithmetic condition was true."
else
echo "Arithmetic condition was false."
fi
if (( (I > 1) == true )); then ## Same as (( I > 1 )) actually.
echo "Arithmetic condition was true."
else
echo "Arithmetic condition was false."
fi
# Compare by string
if [[ $A == true || $B == true ]]; then
echo "Conditional expression was true."
else
echo "Conditional expression was false."
fi
# Compare by builtin command
if "$A" || "$B"; then
echo "True concept builtin command was called."
else
echo "False concept builtin command was called."
fi
而且我更喜欢字符串比较,因为它虽然可能有点慢,但它是一种不那么老套的方法。但如果我愿意,我也可以使用其他方法。
(( ))
, [[ ]]
, true
, 和false
所有只是返回退出代码的内置命令或表达式。与其认为它们确实是 shell 主要语法的一部分,不如只考虑类似的东西。