2017-09-29 5 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; 

しかし、空の変数をキャッチするように見えるdoes notの。誰かが間違っていることを指摘したり、提案/解決策を提示することはできますか?助けを前にありがとう。

+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)ループがコードを読みにくくするケースです。 1つの変数につき1行の素晴らしい呼び出しの垂直リストのために何かがあります。

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} || : 

末尾|| :変数が空のときから出るスクリプトを防止します。

関連する問題