いまさら改行コードの違いに悩む

新しいテスト環境に Cygwin を入れる。

テスト用のシェルスクリプトを動かしたらエラー連発。
どうやら改行コードが原因らしい。

ふつうの Unix
\n
Cygwin
\n
Windows
\r\n

`コマンド` でコマンドの実行結果を取り出したとき、改行をうまく捨ててくれないみたい。

Cygwin の中だけで閉じていると、

$ echo foo
foo
$ echo [`echo foo`]
[foo]
$ echo foo | hexdump
00000000  66 6f 6f 0a
00000004
$ echo [`echo foo`] | hexdump
00000000  5b 66 6f 6f 5d 0a
00000006

となる。

echo foo で "foo\n" を出力するが、`echo foo` は "foo" のみとなる。

ところが、Windows が絡むと、

$ cmd /C echo foo
foo
$ echo [`cmd /C echo foo`]
]foo
$ cmd /C echo foo | hexdump
00000000  66 6f 6f 0d 0a
00000005
$ echo [`cmd /C echo foo`] | hexdump
00000000  5b 66 6f 6f 0d 5d 0a
00000007

cmd /C echo foo で "foo\r\n" を出力し、`cmd /C echo foo` が "foo\r" となる。

昔の Cygwin だと `cmd /C echo foo` も "foo" のみになったんだけどなぁ。

対処方法

bash だけソースからコンパイル & インストールしたら直った。