シェルスクリプトで複数行を出力したいとき、echoを連続するのが嫌だな、と感じることがあるはずだ。
もちろんシェルスクリプトにも改行の方法が用意されている。いくつかご紹介しよう。
目次
改行を出力したいとき
シェルスクリプト実行時に「メッセージを改行し、複数行にまたいで表示したい」もしくは「複数行の結果を保存したい」という場合もあるだろう。
方法はいくつかあるが最も簡単なのは、echoコマンドを連発しリダイレクトで結果を保存する、といった方法だろう。
他にも手段があるので、このページで紹介しようと思う。
echoコマンドをならべる
もっともベーシックな方法。echoを連発しても改行はされる。
vi strings-ex1.sh
#!/usr/bin/bash echo "aaa" echo "bbb" echo "ccc"
実行結果
$ ./strings-ex1.sh
aaa bbb ccc
以降はどれもほぼ同じ結果となる。
echoコマンドの改行
オプションとして「-e」をわたすことと「"」で文字列を囲むこと、改行したい位置に「\n」改行コードをいれる。
vi strings-ex2.sh
#!usr/bin/bash echo -e "aaa\nbbb\nccc"
ファイルヘ保存
シンプルパターン
ファイルへ保存する場合は順にリダイレクトしてゆく。
vi strings-ex3.sh
#!/usr/bin/bash echo "aaa" >> data.txt echo "bbb" >> data.txt echo "ccc" >> data.txt
見ての通り、あまり美しくはない。
{}を使用してスマートにする
{}を使用すると「グルーピング」が可能になる。グルーピングをすると複数のコマンドを一つのコマンドとして認識するようになる。これによりリダイレクトの回数を減らせる。
vi strings-ex4.sh
#!/usr/bin/bash
{
echo "aaa"
echo "bbb"
echo "ccc"
} >> data.txt
printfを利用する
C言語などでは馴染深い「printf」を使用することもできる
vi strings-ex5.sh
#!/usr/bin/bash printf "aaa\n" printf "bbb\n" printf "ccc\n"
printfを利用、もう少し書式を設定する
vi strings-ex6.sh
#!/usr/bin/bash printf "%s\n" aaa printf "%s\n" bbb printf "%s\n" ccc
catコマンドを利用する
catコマンドとリダイレクトを駆使すると、任意の終端コードを指定して入力を受付ることができる。
vi strings-ex7.sh
#!/usr/bin/bash cat > data.txt << "EOF" aaa bbb ccc EOF
まとめ
このページでは改行の出力方法についてまとめてみた。その時々でいずれかの手段を使い分けていただければと思う。




