KornShell - IF语句中的分组条件

时间:2013-04-29 16:09:57

标签: shell if-statement conditional-statements ksh

我在KornShell(ksh)上得到以下代码段失败:

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

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

据我所知,这会失败,因为括号在子shell中运行,而无法识别var1。 那么怎样才能将条件集合在方括号内呢?

N.B。我已经知道以下解决方案,不想使用它们:

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

2 个答案:

答案 0 :(得分:3)

你在找这个吗?

#!/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. parantheses周围必须有空格
  3. 你有一个错字,有一个多余的"漂浮在
  4. 所以这......

    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
    

    然后它会起作用。

答案 1 :(得分:0)

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

希望它有所帮助。

问候。