1

我尝试使用 bash,甚至尝试了文档和一些线程,尽管我似乎无法正确处理。

S=(true false)
if (( ${S[0]} || ${S[1]} ))
then
    echo "true"
else
    echo "false"
fi
  • 如何在 bash 下评估布尔表达式?(有没有机会修复上面的代码片段?)
  • 是否有可能在没有 的情况下对其进行评估if,即直接将其分配给变量(如果没有操作)?
4

2 回答 2

3

而不是S=(true false),您需要像这样创建数组:

S=(1 0)

然后这个 if 块:

if (( ${S[0]} || ${S[1]} ))
then
    echo "true"
else
    echo "false"
fi

将输出:

真的

请注意,真/假在 BASH 中被视为文字字符串“真”和“假”。

于 2013-08-14T18:18:30.847 回答
1

bash 中没有真正的布尔值,只有整数算术表达式,例如 (( n )),如果其值大于 1,它将返回退出代码 0(无错误或无故障代码),或者如果计算结果为 0,则非零代码(具有错误代码)。如果它调用的命令返回 0 退出代码,则if语句执行块,否则在块上执行。您可以像这样在 bash 中模仿布尔系统:thenelse

#!/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 主要语法的一部分,不如只考虑类似的东西。

于 2013-08-14T19:34:46.533 回答