昨日の続き。
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/dir と with と space の 3 つの引数が渡されてしまっている。本当は一つの引数として渡したいのに...
解決策は泥臭いけど、変数を " で囲む。
$ cd "$foodir"
コマンドラインから空白入り path へ移動するのは面倒なので、少し面倒でも助かる。
shell script を作ってる時でも、同じトラブルは起きる。むしろ、shell script でハマる時の方が重症かもね。
No comments:
Post a Comment