286

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
4

7 に答える 7

553

これをやってみてください:

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

$@との違い$*:

  • 引用されていないため、結果は特定されていません。Bash では、両方とも別々の引数に展開されてから、ワード分割されてグロブ化されます。

  • 引用符で囲まれ、"$@"各要素を個別の引数として"$*" 展開し、1 つの引数にマージされた引数に展開します: "$1c$2c..."(cは の最初の文字ですIFS)。

ほとんどの場合、 が必要です"$@"。についても同様です"${arr[@]}"

常にそれらを引用してください!

于 2013-03-28T20:57:30.790 に答える
85

エコーする引数を引用するだけです:

( IFS=$'\n'; echo "${my_array[*]}" )

サブシェルは、使用後に IFS を復元するのに役立ちます

于 2013-03-28T21:00:06.553 に答える