- ベストアンサー
シェルプログラミングでスペースを含むパスの扱い方
- シェルプログラミングでスペースを含むパスの扱い方を解説します
- スペースを含むパスを引数として渡す際に発生するエラーの対処方法を紹介します
- バックスラッシュやダブルクォーテーションを使った方法など、複数のアプローチを試すことをおすすめします
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
#2の方が書いている通り、program.sh の中に書いてあると思われる、 find $1 -name $2 が間違いですね。 find "$1" -name "$2" 「空白を含む(かもしれない)変数を空白で区切らず一語として扱いたいとき」は、" " で囲んでください。 「空白を含んだ文字列を一語として扱いたいとき」も同じく、" " で囲む。
その他の回答 (2)
- kmee
- ベストアンサー率55% (1857/3366)
program.shの中身がわからないので、 >\を/に変えて””でくくりました。 とか >" "(スペース)を"\ "(バックスラッシュとスペース)に変えて””でくくって というのがよくわかりませんし、 このfindがC:\Program Files\とかC:/Program Files/とかを解釈できるかもわかりません。 何を使っているか、明記してください。 ( MinGW/MSYSなのか、Cygwinなのか、他の環境なのか) > find $1 -name $2 find "$1" -name "$2" です。 find $1 -name $2 は、展開されて find C:/Program Files -name *.pdf になります。なので、C:/Program と Files に分離されます。 シェルスクリプトのデバッグには、-xや-vオプションを付けて、どんなコマンドが実行されているか確認するとよいでしょう。 sh -v program.sh "C:\Program Files" "*.pdf" sh -x program.sh "C:\Program Files" "*.pdf" sh -v program.sh "C:/Program Files" "*.pdf" sh -x program.sh "C:/Program Files" "*.pdf"
- DIooggooID
- ベストアンサー率27% (1730/6405)
C:\Program Files\ この代わりに、 8.3形式 の C:\PROGRA~1\ こちらを使用なさってみては、いかがですか?
補足
回答ありがとうございます。program.shに渡されるパスが必ずしもProgram Filesを含んでいるとは限らりませんし、それだとまずパスを読んでProgram Filesが含まれているか確認する手間がかかるのでうまくいきません。