私がここで何を見逃しているのでしょうか?
単純な配列を作成しました。
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[@]}"