仙台の山奥で自転車に乗ったり転んだり

愛車の GIOS でサイクリングしたりポタリングしたり、それをブログに記録してみたり。ロードバイクや自転車や坂のことを書いてみたり。ときたまプログラムのことを忘れないようにメモってみたり。

bash の read でバックスラッシュをエスケープ文字として扱わない

プログラムの検証で、何千パターンかの引数をリストアップしたファイルをもとに、プログラムを逐次実行して検証していたら、バックスラッシュを含むパターンだけ失敗していた。

イメージ

$ cat pattern.txt | while read TEST; do ~/test_method "${TEST}"; done;

実行結果の差分からプログラムの問題だと思って確認していたら、実行時点でバックスラッシュがエスケープ文字として評価されているのが原因でした……。

「-r」オプションをつけて、バックスラッシュをエスケープ文字として扱わないようにするだけで解決しました。

$ cat pattern.txt | while read -r TEST; do ~/test_method "${TEST}"; done;