今回はちょっと初歩的な内容だけど、シェルスクリプトで利用する変数に改行を含めた文字列を代入、取得する方法についてを記述する。
まずは、以下のようにcatで改行を含んだファイルを変数に代入してみよう。
/work/test$ cat test.txt
testtest
testtest1
testtest2
testtest3
/work/test$ aaa=`cat test.txt`
/work/test$
この、上記で適当に指定した変数「aaa」からechoで改行付きで出力させる場合、以下のように「"(ダブルクォーテーション)」で変数を囲ってあげる必要がある。
/work/test$ echo $aaa
testtest testtest1 testtest2 testtest3
/work/test$
/work/test$ echo "$aaa"
testtest
testtest1
testtest2
testtest3
/work/test$
では、シェルスクリプト内で改行コードと文字列を結合させて改行を含めた変数を作成する場合、どうすればよいのだろうか?
まずは、単純に改行コード「\n」を含めた状態で実行してみよう。
$ bbb="aaa\naaa\naaa\n"
で、これを先ほどと同様にechoで読み取る。
この時、「-e」オプションを利用しないと、変数に入れいている改行コード「\n」が認識されず、一行で表示されてしまう。
/work/test$ echo $bbb
aaa\naaa\naaa\n
/work/test$
/work/test$ echo "$bbb"
aaa\naaa\naaa\n
/work/test$
/work/test$ echo -e $bbb
aaa
aaa
aaa
/work/test$
/work/test$ echo -e "$bbb"
aaa
aaa
aaa
/work/test$
とはいえ、シェルスクリプト内で改行コードを含めた変数を使いたい場合、「echo -e」を用いないでも改行済の変数を利用したいときも有るだろう。
そういう時は、他の変数に「echo -e」を利用して代入してしまえばいい。
/work/test$ ccc=`echo -e "$bbb"`
/work/test$
/work/test$ echo $ccc
aaa aaa aaa
/work/test$ echo "$ccc"
aaa
aaa
aaa
/work/test$