しらいです。

In article <4108B8F7.24CF98D0@ht.sakura.ne.jp>,
IIJIMA Hiromitsu  <delmonta@ht.sakura.ne.jp> wrote:
>いいじまです。shells 送り。

 元の話が見えないので微視的な話になりますが。


>> > '$f' とシングルクォートでくくってはいけませんね _| ̄|○
>> >       mv "$f" "`echo '$f' | nkf -mJwx`"
>> 
>>   "` `"の中の$fは' '囲みでいいのかな? …と思ってやってみると、bashでは
>> だめだけど、cshだと一応大丈夫なんですね。
>
>\"$f\" というのを手元の FreeBSD で試したんですが、それがどうも上手くいか
>ないようなので、苦肉の策で ' ' にしました。` ` の存在を無視して $f を展開
>して、それから ` ` の中身を実行するようです。

 sh 系 shell で "" の中に `` を入れ子に出来るようになったの
は確か SystemV の ksh からで、Ken Thompson 版 sh 及び Bourne
shell ではそもそも "" の中で `` は meta cheracter ではありま
せん。
 一方、"" の中に `` を入れ子に出来る shell、具体的には ksh,
ash, bash, zsh では、内側の `` の中では外側の "" の存在が無
かったことになりますから、その中に "" を更に記述出来ます。
 なので、Ken Thompson 版 sh と Bourne shell 以外の sh 系で
は「"$f"」で済む筈ですが。

# 因みに fdsh は Bourne shell clone にしてあるので `` 自体
#展開しません。この 7 種類以外の sh 系 shell をご存知の方が
#いたら、挙動を確認してみて下さい。


 csh や tcsh は詳しくないので幾つかの実装で実際に試してみた
ところ、どの実装でも通常は「"$f"」で済みますが、$f が IFS の
空文字やタブを含んでいると `` が一致しないと言われます。
 やはり先に "" と $ の処理をしてしまってから `` を処理する
という 2-pass なんでしょうかね。1-pass で parse しないと色々
弊害があるんですけど。escape が面倒そう。


>ファイル名に " や \ が入っている可能性はほぼ考えなくていいので、sh 系の
>ほうが無難ですね。そもそも csh 系でスクリプトは一切書くな、と主張する人
>も世の中にはいらっしゃいますし。

 そんなこと言うのなら、IFS である空文字やタブが含まれている
可能性だってほぼ考えなくていいので「$f」で十分だってことにな
りますよ。
 それではうまくいかないから quoting するという話が出て来た
のではないんでしょうか。もしそうなのなら、他の meta character
に関する配慮も必要になろうかと思います。

-- 
                                               しらい たかし