shirai@unixusers.net (Takashi SHIRAI) writes:
>>    $ cat hoge
>>    1 2 3 4 5
>>    6       7       8       9       0
>>    6       7       8\       9       0
>>
>>  だったとき、中間回答の方法では出力結果が
>>
>>    1 2 3 4 5
>>    6       7       8       9       0
>>    6       7       8       9       0
>>
>>  になっちゃいます。これの回避策をまだ探し中なのです。
>
>  これは bash の特性ですね。ash や Bourne shell だと「\」は
> 保持されます。これは bash が 2-pass で parsing しているから
> で、echo を外部コマンドに差替えても引数に「\」が渡っていない
> ことが確認出来ると思います。
>  zsh や ksh も「\」を落としますね。この辺りは source を読ん
> だことがないので理由は知りません。command line 処理の時点で
> はなく read 自体が落としているのかも知れません。

read した直後に、引数なし set コマンドでシェル変数を表示してみると
その時点で \ が消えてます(bash in linux)。

>  read のせいと言えば、行頭と行末の IFS を落としてしまうのは
> read の仕様ですね。なので、echo の側だけ細工しても IFS 対策
> には不十分です。

IFS対策と言えるかどうかわかりませんが read の前に IFS=  すれば
行をそのまま読めますよね。

他には、上記サンプルのような「shスクリプトとして見て文法的に
エラーで無い場合」は sh -nv hoge で \ もそのまま表示されます。
表示してみないと表示できるかどうかわからないのが難点。
-- 
tksotn