2014-12-05

空白を含む path を bash 変数にして cd する

昨日の続き。

path に空白が含まれていることがある。純粋な Unix 系のディレクトリー構成では見られないけど、Windows や Mac だとタマに... 有名な所では Windows の Program Files とか、Mac の ~/Library/Application Support/ とか。

コマンドライン派の人間が好んで「空白を含む」ディレクトリーを作ることはないので、他人のソースを扱う時や、開発環境が元からそういう仕様だったりして悩まされるかな。

これも、.bashrc に変数として保存できれば楽なんだけど事は楽に進まない。

foodir="/path/to/dir with space"

上の様に「dir with space」という空白入りのディレクトリーに移動したいとする。

そこで変数を使って cd しようとするとエラーになる。

$ cd $foodir
bash: cd: dir: No such file or directory

dir というディレクトリーはないと怒られた。実は変数が渡される時、bash shell によってスペースが「引数の区切り」になってしまっている。この場合、$foodir/path/to/dir with space に展開された後、cd コマンドに /path/to/dirwithspace の 3 つの引数が渡されてしまっている。本当は一つの引数として渡したいのに...

解決策は泥臭いけど、変数を " で囲む。

$ cd "$foodir"

コマンドラインから空白入り path へ移動するのは面倒なので、少し面倒でも助かる。

shell script を作ってる時でも、同じトラブルは起きる。むしろ、shell script でハマる時の方が重症かもね。

No comments:

Post a Comment