敵は足元にいた
変数をエコーする際に気を付けることは...ずばり,"改行文字を含んでい(て,かつ表示に反映させ)るならエスケープしよーぜ!"
何言ってんねんこいつ.とりあえずハマった事例を簡単にしてみます.例えば,
foo.txt
1
2
3
なんてファイルがあるとします.その内容を変数に格納してechoで出力してみます.$ hoge=`cat foo.txt` | echo ${hoge}
1 2 3
改行されず,代わりに空白が挿入されて1行になってしまいました.これで随分悩まされました.これに遭遇した時はバッククォート内のコマンドが長い上に正規表現で置換までしていたので,そのうちのどこで改行が空白に置換されてしまったのかと(汗)けれど原因は冒頭に示した通り,改行がエスケープされていなかっただけ.ふっつーにバッククォート内の箇所をコマンドライン上で再現したら出力に問題は無かったのです.じゃあこれはechoだなと.つまり以下のようにechoする変数をダブルクォートで囲んで改行文字をエスケープしてやればいいわけでした.$ hoge=`cat foo.txt` | echo "${hoge}"
1
2
3
もう少し問題箇所の切り出し方を考えながらやるよう反省です.
0 件のコメント:
コメントを投稿