- 締切済み
配列の値を一行あけて出力
配列の値を一行あけて出力したいのですが、うまくいきません。 ご教授お願いいたします。 <shell> #!/bin/bash ARRAY=("aaaa" "bbbb" "cccc") IFS=$'¥n'$'¥n' echo "${ARRAY[*]}" <現在の出力> aaaa bbbb cccc <期待する出力> aaaa bbbb cccc
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- wakagi1189
- ベストアンサー率41% (16/39)
IFSは句切りの文字を何にするかを決定する変数ですので、一文字しか指定できません。 IFS=tako とでもやってもらえれば分かると思いますが、 句切りはtになってしまいます。 ですから、IFS=$'\n'$'\n'は、たしかに改行2つを表しますが、tako同様、最初の一文字に相当する最初の改行だけが、句切りとして使われます。 期待する出力を出すには、IFSを諦めて、 U=("aaa" "bbb" "ccc") for u in ${U[*]} do echo -e "${u}\n\n" done とか、 for u in aaa bbb ccc do echo -e "${u}\n\n" done とか、 最後の二行の無駄な改行がうっとおしいなら、 U=("aaa" "bbb" "ccc") num=1 for u in ${U[*]} do echo -e "${u}" if [ $num -lt `echo ${U[*]} | wc -w` ] then echo -e "\n\n" fi num=`expr $num + 1` done とかでしょうか。これは、wcで集合の単語数を計算して、現在の単語が 最後の単語かどうかを識別しています。
- ballville
- ベストアンサー率47% (233/487)
1案 echo "${ARRAY[*]}"|awk -v RS=' ' -v ORS=$'\n\n' '{print }' 2案 echo "${ARRAY[*]}"|sed 's/ /\n\n/g' 3案 for i in `echo "${ARRAY[*]}"` ;do echo ${i}$'\n';done 質問者さんはもう見ていないでしょうが、思いつくままに書いてみました
- notnot
- ベストアンサー率47% (4900/10361)
manより: * (1 から始まる) 全ての位置パラメータに展開されます。 ダブルクォート の内部で展開が行われたときは、 それぞれのパラメータを特別な変数である IFS の最初の文字で区切って並べた 1 つの単語に展開されます。 つ まり、 "$*" は "$1c$2c..." と同じです。 ここで c は変数IFS の値の最初の文字です。 ということで、複数文字を挟むのは無理です。 sed を使う等して改行2つに置換するか、for でループして1つずつechoするか。