事象
abcde=$a$b$c$d$e echo $abcde
とした場合に表示結果が想定と異なる。
コマンド実行環境
- Debian GNU/Linux 9 (stretch)
考えられる原因
$a~$eのどれかに文末の制御コード「^M」が入りこんでいる。
確認方法はそれぞれを小分けにしてテキストファイルに出力し、制御コードを可視化した状態で確認する。
解決策
以下の記事にあるように想定外に入り込んだ改行コードを変換する。
$ nkf -Lu
以下、補足です。
補足
改行コードを表す「^M」が一文として取得時に入っているとどうなるのでしょうか。
例えば上の例で$dの末尾に「^M」が入っていると$eの後ろに「$d」が来る想定外の結果になってしまいます。
元のインプットファイルはwgetコマンドで取得したページなので中身をfileコマンドで確認すると
$ file input.txt input.txt: UTF-8 Unicode text, with CRLF line terminators
となっていました。
それを以下のようにループ処理で切り出しながら$a~$eに格納するといった流れでしたが、line部分として文字列にすると明示的に「^M」が出現しました。
cat ./input.txt | while read line do ...
同事象が発生した際、原因の切り分けに時間がかかったので備忘録として残しておきます。
ご参考になれば幸いです。