2017-09-29 80 views
0

我在數組中有多個變量,我想遍歷每個變量並查找它們是否爲空。在bash數組中找到空變量

代碼:

declare -a CONFIG_PARAM=($Var_MODE $Var_Path $Var_Stage $Var_line $Var_CVG $Var_Operator) 
for PARAMS in "${CONFIG_PARAM[@]}"; do 
    if [ ! $PARAMS ]; then 
     echo -e "$PARAMS is empty" 
    fi 
done; 

但它似乎沒有趕上空變量。有人能指出什麼是錯誤的或提供任何建議/解決方案嗎?預先感謝您的幫助。

+2

行情。 '「$ Var_MODE」「$ Var_PATH」'等等和'[! 「$ PARAMS」]' –

+0

但是,只有在您需要這些值的情況下。如果您需要名稱,那麼您需要使用間接擴展。 –

+0

謝謝我剛剛嘗試過並獲得了值,但我需要打印變量名稱! –

回答

4
declare -a config_params=(Var_MODE Var_Path Var_Stage Var_line Var_CVG Var_Operator) 
for param in "${config_params[@]}"; do 
    if ! [ -n "${!param}" ]; then 
     echo "$param is empty" 
    fi 
done 

注:

+0

非常感謝,這非常有幫助。但是我已經嘗試了上面的代碼,它仍然會打印變量的值而不是變量名稱。 –

+0

@GopinathS,......呃......不,不。看到這個代碼實際運行在https://ideone.com/4iUpnd –

+0

我的不好,我沒有刪除數組中的變量'$',對此抱歉。現在我理解了你筆記中的間接引用概念。非常感謝,感謝您的幫助。 –

1

這是(IMO)循環使您的代碼不易讀的情況。對於一個很好的垂直調用列表來說,每個變量一行是有說明的。

check_empty() { 
    [ -z "${!1}" ] && printf '%s is empty\n' "$1" 
} 

併爲每個變量分別調用。

check_empty Var_MODE 
check_empty Var_Path 
check_empty Var_Stage 
check_empty Var_line 
check_empty Var_CVG 
check_empty Var_Operator 

其實,你甚至不需要單獨的功能。參數擴展運算符:?將顯示一條錯誤消息,如果該消息爲空,則會顯示該變量的名稱。

: ${Var_MODE?empty} || : 
: ${Var_Path?empty} || : 
: ${Var_Stage?empty} || : 
: ${Var_line?empty} || : 
: ${Var_CVG?empty} || : 
: ${Var_Operator?empty} || : 

尾隨|| :防止腳本在變量爲空時退出。