比较运算符 Bash

Comparison operators Bash

是否可以从 bash 中的比较中收集 "True or False"?不使用 "if".

示例(让我用另一种语言制作)

x = 1
y = 1
z = x == y 
print(z) #Returns true

如果可以的话bash怎么样?

已解决

x=1
y=1
[[ $x -eq $y ]] && z=true || z=false
echo $z #Returns true

感谢@Viktor & @randomir

你可以只使用 test,不用 if:

x=1
y=1
[ $"{x}" -eq $"{y}" ] && echo "True" || echo "False"

此处,如果 x 等于 y,则逻辑与 (&&) 起作用,并且脚本 echo "True".

如果 x 不等于 , logical OR (||`) 有效,脚本 echo "False".

更新。通过@randomir的建议,另一种可用的解决方案:

(( $"x" == $"y" )) && echo True || echo False

或者:

[[ $"a" == $"y" ]] && echo True || echo False

当您将 truefalse 存储在变量中时,您可以直接在条件中使用它:

#!/bin/sh
X=1
Y=1
if test "$X" -eq "$Y"; then Z=true; else Z=false; fi

echo "Z is $Z"

# you can just use Z here
if "$Z"; then do_ something; fi

没有直接产生布尔值的表达式,但如果您真的想要(未经测试),您可以将 if/else 包装在一个函数中:

#!/bin/sh
bool_eq() {
  if test "" -eq ""; then echo true; else echo false; fi
}

X=1
Y=1
Z="$(bool_eq "$X" "$Y")"

echo "Z is $Z"

# you can just use Z here
if "$Z"; then do_ something; fi