~\Share\Program Files
というパスを補完する場合を考えよう。
bash だと ~/Share/Program\ Files
と補完する。
UNIX だとワード単位で独立した引数としてコマンドに引き渡されるので「/home/USERNAME/Share/Program Files
」をそのまま引き渡すことができる。
だが、Windows の場合、以下のような問題があるため、UNIX のようなことはできない
\
はディレクトリ区切り記号と認識されるので、エスケープ記号として使うことはできない- Windows では全引数が1文字列として引き渡されるので、空白をそのままわたすと、パラメータ区切りと誤認されてしまう
結果、引数全体を二重引用符で囲むのが妥当となる。
が、ここで ~
が問題となってくる。~
を二重引用符の中に入れるとまずいのだ。~
が %USERPROFILE% への置換対象外になってしまうのだ。
というわけで、現在の nyagos では苦肉の策として ~"\Share\Program Files"
へ変換している(nyaos 3000 では ~\"Share\Program Files"
だったが、\"
だと \
が二重引用符のエスケープと読めてしまうので、やめたのだ)
なんだか、かっこわるいなぁ。
一案として、Windows のエスケープ文字である ^
を使って
~/Share/Program^ Files
とするのも考えたが… すべてのコマンドが^
を理解してくれるとも限らんのよね。くまったなぁ