関数の配列の表示 - 動作しません

関数の配列の表示 - 動作しません

私がここで何を見逃しているのでしょうか?

単純な配列を作成しました。

declare -a appArray=(
    "item1 -a -b"
    "item2 -c -d"
    )

これに答えると、すべてを見ることができます。

echo ${appArray[@]}

> item1 -a -b item2 -c -d

次に、次の関数を作成します。

fc_DEBUG () { 
    if [ $1 -eq 1 ] ; then 
        echo $2; 
    fi; 
};

これはbashスクリプトの中にあるように設計されており、DEBUG変数を設定するとテキストがエコーされます。したがって、手動でアイテムを追加および削除することなく、スクリプト全体で使用できます。

基本データと連携します。

fc_DEBUG $DEBUG "This is DEBUG text"

ただし、配列を使用して呼び出すと、配列の一部のみが取得されます。

fc_DEBUG $DEBUG "${appArray[@]}"

> item1 -a -b

答え1

${appArray[@]}実行する前に拡張されましたfc_DEBUG。したがって、関数が表示する2番目のパラメータは配列の最初のパラメータです。具体的には、これら3つのパラメータfc_DEBUG

$DEBUG "item1 -a -b" "item2 -c -d"

($ DEBUGを$ DEBUGの実際の値に適用された分割+glob演算子によって生成された単語に置き換えます(引用符を忘れたためです)。技術的な面では、配列は参照ではなく値として渡されます。

fc_DEBUG () { 
    if [ "$1" -eq 1 ] ; then 
        shift
        echo "$@"
    fi
}

これで、パラメータリストの最初のパラメータを削除し、残りのshiftすべてのパラメータを印刷します。

引用符付きの配列で呼び出します。

fc_DEBUG "$DEBUG" "${appArray[@]}"

関連情報