ホームディレクトリ以下にある空白入りのファイル名の補完は難儀だなぁ

~\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 とするのも考えたが… すべてのコマンドが^ を理解してくれるとも限らんのよね。くまったなぁ