2012-09-20 183 views
0

KSH - HP-SOL-Lin 需要POSIX結合Unix測試命令&& + ||

我想測試多個條件是否爲真,然後做一些事情。

假設:

  • FIELDS=0
  • $STRING=''$STRING=' '

現在我有:

if [[ $FIELDS -ne 0 && ! -z $STRING ]]; do 

這工作得很好,如果$STRING爲空,但它也有一個空間。我怎樣才能先處理兩個$STRING測試?從概念上講,我想的等價的:記住

[[ $FIELDS -ne 0 && [ ! -z $STRING || $STRING = ' ' ] ]] 
+0

使用'[['會導致不確定的結果。如果你想成爲POSIX,你必須使用''''或'test'。 –

+0

@WilliamPursell'[['不會導致未指定的結果。非POSIX兼容的結果或不可移植的結果,是的,但'bash'或'ksh'或'zsh'或者其它正在執行的shell都會指定結果。 – twalberg

+1

@twalberg引用標準:'以下單詞在某些實現中可能被識別爲保留字(當沒有引用任何字符時),從而導致未指定的結果: [[]] function select' –

回答

1

你可以單獨測試:

if [[ $FIELDS -ne 0 ]]; then 
    if [[ ! -z $STRING || $STRING == ' ' ]]; then 
    do some stuff 
    fi 
fi 
0

軸承是$字符串可以是單個空格,我假設值設置爲(空和太空之間)是無關緊要的,在這種情況下,一個簡單的方法是首先運行$字符串的簡單檢查:

if [[ $STRING == ' ' ]] 
then 
    export STRING='' 
fi 

if [[ $FIELDS -ne 0 && ! -z $STRING ]]; do 

提高可讀性,意味着你將不必執行相同的附加測試對隨後的命令。

如果我的假設不正確,請不要猶豫,把我送到淘氣的一步。

1

對於POSIX一致性,

if [ "$FIELDS" -ne 0 -a (! -z "$STRING" -o "$STRING" = " ") ]; then 
... 
fi