配列宣言:二重引用符と角括弧

配列宣言:二重引用符と角括弧

たぶんこれは愚かな質問かもしれませんが、2時間インターネット検索をしても意味のある結果が出ませんでした。

簡単に言えば、Bashには次の違いがあります。

X="
a
b
c
"

そして

X=(
a
b
c
)

前者は変数の定義に従い、後者は配列の定義に従う。

配列は多要素変数なので、前者もすべての目的のための配列です。

前者が配列の場合(a)二重引用符と(b)角括弧の唯一の動作上の違いは、配列要素の引用規則の動作ですか?

どんな洞察力でもいただきありがとうございます。

ベストアンサー1

いいえ、前者は配列ではありません。

たとえば、インデックスを使用してメンバーを選択することはできません。

arr=(a b c)
echo "${arr[1]}"  # b

配列を使用してパラメータを渡すことはできますが、文字列は渡すことはできません。より良い結果を得るには、スペースを含む要素を使用してください。

arr=(a 'b c' d)
printf '(%s)\n' "${arr[@]}"

string=$'\nm\nn o\np\n'
printf '(%s)\n' $string

出力:

(a)
(b c)
(d)
(m)
(n)
(o)
(p)

man bash2つの変数タイプの説明が含まれており、インターネット検索は必要ありません。

おすすめ記事