[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[FDclone-users:00028] Re: escaping a !
- Subject: [FDclone-users:00028] Re: escaping a !
- From: Takashi SHIRAI <shirai@nintendo.co.jp>
- Date: Mon, 19 Aug 2002 16:11:18 +0900
しらいです。
In Message-Id <86fzxk2rp8.wl@archon.local.idaemons.org>
"Akinori MUSHA" <knu@iDaemons.org>さんwrites:
> カレントディレクトリに「ssh!」というファイルがあるとして、
> 以下のようになります。
>
> $ ls -l ssh[tab]
> $ ls -l "ssh!" [enter]
> !": Event not found.
この辺りの実装のお手本としたのは bash-1.x の仕様ですが、今
試してみたところ bash-1.x でも全く同じ問題が生じますね。
> $ ls -l "ssh\!"
> ls: ssh\!: No such file or directory
>
> \ ではエスケープできないようです。
"" 内の \ は meta character ではなく \ そのものとして振舞
うのが Bourne shell の仕様ですから、この部分の仕様変更は出来
ません。既存の Bourne shell 用 script が動かなくなってしまう
心配があります。
> $ ls -l 'ssh!'
> -rwxr-xr-x 1 knu wheel 198 Aug 12 21:07 ssh!
>
> '' で括るとうまく行くようです。
meta character を含む filename 補完の際には "" の代わりに
'' で括って補完する仕様に変更してしまうと、今度は「'」を含む
filename の補完の際にややこしい話になってしまいます。
「\」を使えば "" の中に表現不能な文字はありませんが、'' の
中では唯一「'」のみが表現不能なので、"" で括る仕様にしていま
す。多分 bash-1.x でもそう考えていたんじゃないでしょうか。
という訳で幾つか回避策を考えてみました。
1."" 内の「!」は評価しないようにする。
→これまでの FDclone との互換性がなくなる。
2."" で括る代わりに meta character を「\」で escape。
→bash-2.x と同じ仕様。
3."" 内から「!」のみを "" の外に出す。
→「"ssh"\!""」と補完される。
1. は bash との互換性も無くなるので使い勝手が悪くなるかも
知れません。どういう用途があるのかは不明ですが、これまで使え
ていたものがいきなり使えなくなると困るんじゃないでしょうか。
2. は変更箇所が大きくて、何の支障があるかは定かではないも
のの、何らかの弊害が生じる可能性が否めないと思います。このよ
うな特殊例への対処で大局的な変更は災いの元です。
3. は "" の効用が無意味で見た目も気持ち悪いのですが、この
ようなケースはそう頻繁にある訳でもなく、過去との互換性を考え
ると一番無難なように思えます。
取り敢えずは 3. で実装してみようかと思うのですが、みなさん
の意見をお聞かせ下さい。
しらい たかし