【问题标题】:Comparison operators Bash比较运算符 Bash
【发布时间】:2018-02-12 08:46:30
【问题描述】:

是否可以从 bash 中的比较中收集“真或假”?不使用“如果”。

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

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

【问题讨论】:

    标签: bash comparison comparison-operators


    【解决方案1】:

    你可以只用test,不用if

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

    这里,如果 x 等于 y,逻辑 AND (&&) 有效,并且脚本回显“True”。

    如果x 不等于, logical OR (||`) 有效,则脚本回显“False”。

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

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

    或者:

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

    【讨论】:

    • 你为什么用$"{x}"而不是"$x"
    • @M.Becerra 这是一种习惯。在这种情况下,我们不需要{},但是当您在代码中这样做时它很有用:echo "Just example ${filename}.tar.gz,因此 bash 知道我的变量名为 filename,而不是 filename.tar.gz
    • 由于 OP 对 bash 解决方案感兴趣,也许值得一提的是仅算术测试,(( x == y )) && echo True || echo False。还有[[ $x -eq $y ]],不需要引用。
    • 成功了,谢谢
    【解决方案2】:

    当您将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 "$1" -eq "$2"; 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-12-10
      • 1970-01-01
      • 2021-01-13
      • 2019-08-13
      • 1970-01-01
      • 2023-03-03
      相关资源
      最近更新 更多