【问题标题】:KornShell - grouping conditions in an IF statementKornShell - 在 IF 语句中分组条件
【发布时间】:2013-04-23 09:27:03
【问题描述】:

我在 KornShell (ksh) 上遇到以下 sn-p 失败:

var1="1"
var2="2"
if [ ( "$var1" != "" -o "$var2" != "") -a ( "$var1" = "$var2" -o " "$var1" = "x") ]; then
   echo "True"
else
   echo "False"
fi

ksh:语法错误:`"$var1"' 意外

据我了解,这失败了,因为括号在无法识别 var1 的子shell中运行。 那么如何在方括号内对条件集进行分组呢?

注意我已经知道以下解决方案并且不想使用它们:

  • 将条件放在单独的嵌套 if 语句中。
  • 优化/重新排列条件,以便只将它们放在一组中。

【问题讨论】:

    标签: shell if-statement conditional-statements ksh


    【解决方案1】:

    你在找这个吗?

    #!/bin/ksh
    
    if [[ -n $1 || -n $2 ]] && [[ $1 == "$2" || $1 == x ]]; then
            echo "True"
    else
            echo "False"
    fi
    

    运行:

    $ ./if.sh "" ""
    False
    
    $ ./if.sh 1 2
    False
    
    $ ./if.sh 1 1
    True
    
    $ ./if.sh x 2
    True
    

    如果您想知道为什么您的代码会失败:

    1. 你需要转义括号\(
    2. 括号周围必须有空格
    3. 你有一个错字,有一个多余的" 漂浮在周围

    所以这个...

    if [ ( "$var1" != "" -o "$var2" != "") -a ( "$var1" = "$var2" -o " "$var1" = "x") ]; then
                                                             typo ---^              ^
                                         ^------------------ missing spaces --------^
    

    ...应该看起来像这样...

    if [ \( "$var1" != "" -o "$var2" != "" \) -a \( "$var1" = "$var2" -o "$var1" = "x" \) ]; then
    

    然后它就会起作用。

    【讨论】:

    • 非常感谢您的回答阿德里安,非常感谢。转义括号不起作用我仍然得到“ksh:[:missing]”作为错误。我使用了第一个命题:将方括号分解为两个 AND 集合。
    【解决方案2】:

    你需要使用双方括号.. [[--------]]

    希望对你有帮助。

    问候。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-07-01
      • 1970-01-01
      • 2018-10-12
      • 2012-04-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多