次のコードを使用してください。
#! /bin/bash
declare -a arr=("element1"
"element2" "element3"
"element4" )
echo "1"
echo "${arr[@]}"
echo "2"
echo ${arr[*]}
出力は次のとおりです
1
element1 element2 element3 element4
2
element1 element2 element3 element4
したがって、出力は同じです。
それでは、いつ1つの方法を他の方法よりも使用する必要がありますか?
答え1
次の3つのループの出力を比較します。
#!/bin/bash
declare -a arr=("this is" "a test" "of bash")
echo "LOOP 1"
for x in ${arr[*]}; do
echo "item: $x"
done
echo
echo "LOOP 2"
for x in "${arr[*]}"; do
echo "item: $x"
done
echo
echo "LOOP 3"
for x in "${arr[@]}"; do
echo "item: $x"
done
上記のスクリプトは、次の出力を生成します。
LOOP 1
item: this
item: is
item: a
item: test
item: of
item: bash
LOOP 2
item: this is a test of bash
LOOP 3
item: this is
item: a test
item: of bash
何かの目的を指します。"${array[@]}"
二重引用符で囲む空白が含まれていても配列内の項目を保持しますが、その"${array[*]}"
情報を使用または失います${array[*]}
。
bash(1)
これについては、マニュアルページの「配置」セクションに説明されています。
参照配列のすべての要素を使用できます
${name[subscript]}
。パス名拡張との競合を防ぐには、中かっこが必要です。下付き文字がある場合、@
または*
単語が name のすべてのメンバーに展開されます。これらの下付き文字は、単語が二重引用符で囲まれている場合にのみ異なります。単語が二重引用符で囲まれている場合は、単一の単語${name[*]}
に展開され、各配列メンバーの値はIFS特殊変数の最初の文字で区切られ、${name[@]}
nameの各要素は別々の単語に展開されます。