Bash配列の追加要素の問題

Bash配列の追加要素の問題

配列があります

declare -a her=("ger" "blr" "tyg" "")

for i in "${her[@]}"; do
    echo $i
done

わかりました。

ger
blr
tyg

ただし、配列に追加しようとすると、スペースなしで長い文字列が表示されます。

declare -a you

#without quotes and with quotes
#' " same result

for i in {"fgt","fe","ger"}; do
    you+=${i}
done

for i in "${you[@]}"; do
    $i
done

Fgtfeger

何が起こっているのかについての洞察力はありますか?一種の使いやすさを落とします。

答え1

配列複合割り当て構文を使用し、それ以外の場合は長さをインデックスとして使用します。

次のいずれかの方法を使用して配列に追加する必要があります。複合割り当て構文foo=("elem1" ...)たとえば、配列インデックス。

配列複合割り当て構文

括弧で囲まれた形式を使用すると、一度に1つ以上の要素を挿入でき、読みやすくなります。たとえば、

# start with a clean slate
unset you

for i in "fgt" "fe" "ger"; do
    you+=("$i")
done

printf "%s\n" "${you[@]}"

これにより、期待値が生成されます。

fgt
fe
ger

インデックスに挿入長さ

インデックスを割り当てても同様の結果が得られます。たとえば、

unset you
for i in "fgt" "fe" "ger"; do
    you[${#you[@]}]="$i"
done
printf "%s\n" "${you[@]}"

2番目の例は、Bash配列がゼロインデックスであるために機能します。長さ配列のインデックスは、追加時に割り当てる必要がある次に使用可能なインデックスでもあります。

関連情報