UNIXは、スペースと引数を含むフルパス名をどのように処理しますか?
Windowsでは、パスを引用し、その後にコマンドライン引数を追加しますが、UNIXではどうですか?
"c:\foo folder with space\foo.exe" -help
アップデート:
コマンドライン引数からパスを認識する方法を意味しました。
上記のWindowsの例のように引用するか、バックスラッシュでスペースをエスケープすることができます。
"/foo folder with space/foo" --help
/foo\ folder\ with\ space/foo --help
必要に応じて引用符で囲むことも、前に\を付けてスペースをエスケープすることもできますが、ほとんどのUNIXパス(Mac OS Xを除く)にはスペースがありません。
/Applications/Image\ Capture.app/Contents/MacOS/Image\ Capture
"/Applications/Image Capture.app/Contents/MacOS/Image Capture"
/Applications/"Image Capture.app"/Contents/MacOS/"Image Capture"
すべてMacOSXで同じ実行可能ファイルを参照します。
パスを認識することの意味がわかりません-上記のパスのいずれかがパラメータとしてプログラムに渡された場合、シェルは文字列全体を1つの変数に入れます-取得するために複数の引数を解析する必要はありませんパス全体。
スペースはコマンドライン引数を区切るために使用されるため、シェルからエスケープする必要があります。これは、円記号()または引用符を使用して実行できます。
"/path/with/spaces in it/to/a/file"
somecommand -spaced\ option
somecommand "-spaced option"
somecommand '-spaced option'
これは、シェルから実行していることを前提としています。コードを記述している場合は、通常、引数を直接渡すことができ、問題を回避できます。
Perlの例。行う代わりに:
print("code sample");
system( "somecommand -spaced option");
できるよ
print("code sample");
system( "somecommand"、 "-spaced option");
system()呼び出しをリストに渡すと、単一の引数呼び出しの場合のようにスペースの引数が壊れることはありません。
Windowsのようにパス全体を引用するか、次のようにスペースをエスケープすることができます。
/foo\ folder\ with\ space/foo.sh -help
どちらの方法でも機能します。
また、二重引用符にも注意してください。Unixシェルでは、これにより変数が展開されます。明らかなものもあれば(とのよう$foo
に\t
)、そうでないものもあります(のように!foo
)。
安全のため、一重引用符を使用してください。
また、シェル スクリプト (.sh ファイル) の一部としてコマンド ライン引数を使用している場合は、スクリプト内で引数を引用符で囲む必要があることにも注意してください。したがって、コマンドが次のようになっている場合
>scriptName.sh arg1 arg2
arg1 はスペースを含むパスです。シェル スクリプト内では、$arg1 ではなく "$arg1" として参照する必要があります。