2011-03-05 56 views
0

我如何寫POSIX shell腳本做兩件事情:問題的條件判斷

1)當$ VAR1或$ VAR2定義和非空,回聲「成功」
2)當$ VAR3是回聲「success2」

我嘗試了許多-ne -z和-a操作符的組合,但我沒有運氣。

回答

2

(我測試在POSIX模式下的Bash shell下 - 我不能絕對肯定,這一切是嚴格POSIX)

$ var1= 
$ var2= 
$ if [ -n "$var1" -o -n "$var2" ]; then echo "success"; fi 
$ var2=1 
$ if [ -n "$var1" -o -n "$var2" ]; then echo "success"; fi 
success 
$ var3= 
$ if [ -n "${var3+X}" ]; then echo "success2"; fi 
success2 
$ unset var3 
$ if [ -n "${var3+X}" ]; then echo "success2"; fi 
$ 

的第一個條件[ -n "$var1" -o -n "$var2" ]發生的事實不可─優勢空要求也意味着變量被設置。

第二種情況更棘手。 "${var3+X}"expands如果var3未被設置則爲空,如果被設置則爲X。這樣你就可以區分unset和null變量。

+0

謝謝。我忽略了似乎會產生不一致結果的變量調用周圍的引號。 – kaykun 2011-03-05 09:49:54