Bash配列の配列要素を別々の行に出力するにはどうすればよいですか? これはうまくいきますが、確かにもっと良い方法があります:
$ my_array=(one two three)
$ for i in ${my_array[@]}; do echo $i; done
one
two
three
これを試しましたが、うまくいきませんでした:
$ IFS=$'\n' echo ${my_array[*]}
one two three
これをやってみてください:
$ printf '%s\n' "${my_array[@]}"
$@
との違い$*
:
引用されていないため、結果は特定されていません。Bash では、両方とも別々の引数に展開されてから、ワード分割されてグロブ化されます。
引用符で囲まれ、"$@"
各要素を個別の引数として"$*"
展開し、1 つの引数にマージされた引数に展開します: "$1c$2c..."
(c
は の最初の文字ですIFS
)。
ほとんどの場合、 が必要です"$@"
。についても同様です"${arr[@]}"
。
常にそれらを引用してください!
エコーする引数を引用するだけです:
( IFS=$'\n'; echo "${my_array[*]}" )
サブシェルは、使用後に IFS を復元するのに役立ちます