2013-04-29 100 views
2

我得到了下面的代碼片段失敗的KornShell(KSH)分組條件:KornShell - 在IF語句

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

ksh: syntax error: `"$var1"' unexpected

據我瞭解,因爲括號在子shell中運行失敗,其中VAR1不認可。 那麼如何將條件集合分組在方括號內?

N.B.我已經知道以下解決方案並且不想使用它們:

  • 將條件放在單獨的嵌套if語句中。
  • 優化/重新排列條件以便僅將它們放入一組中。

回答

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. 有必須圍繞括號一個空間
  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 

,然後它會工作。

+1

非常感謝您的回答阿德里安,非常感謝。 轉義圓括號不起作用我仍然有「ksh:[:missing]」作爲錯誤。我使用了第一個命題:將方括號分解爲兩個ANDed集合。 – HSM 2013-06-04 15:01:16

0

您需要使用雙括號.. [--------]

希望它能幫助。

問候。