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;