2008-09-08 42 views
20

unix如何處理具有空間和參數的完整路徑名?
在windows中,我們引用了路徑並在之後添加了命令行參數,它在unix中如何?unix如何處理具有空間和參數的完整路徑名?

"c:\foo folder with space\foo.exe" -help 

更新:

我的意思是我怎麼認識的命令行參數的路徑。

+0

你能舉一個例子來說明你的意思是「從命令行參數中識別一條路徑」嗎?每個人都回答了第一部分,可能值得開始一個新的問題。 – rjmunro 2008-09-08 23:33:45

回答

9

如果您願意,您可以引用它,或者您可以使用前面的\來避開空格,但大多數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" 

都指的是同一個可執行文件在Mac OS X

我不知道你的意思怎麼樣識別路徑 - 如果上述任何路徑作爲參數傳遞給一個程序shell會將整個字符串放入一個變量中 - 您不必分析多個參數即可獲取整個路徑。

1

你可以引用整個路徑在Windows或者你可以逃脫的場所,如在:

/foo\ folder\ with\ space/foo.sh -help 

兩種方法都行!

35

您可以用反斜槓引用它像你的Windows上面的例子,或逃避的空間:

"/foo folder with space/foo" --help 
/foo\ folder\ with\ space/foo --help 
+2

我認爲你的意思是「逃離空間」 – cowlinator 2014-09-12 19:57:22

3

由於空格用來分隔命令行參數,它們必須從殼逃跑。這可以使用反斜槓()或引號來完成:

"/path/with/spaces in it/to/a/file" 
somecommand -spaced\ option 
somecommand "-spaced option" 
somecommand '-spaced option' 

這是假設你從shell運行。如果您正在編寫代碼,則通常可以直接傳遞參數,以避免該問題:

perl中的示例。而不是:

print("code sample"); system(「somecommand -spaced option」);

你可以做

print("code sample");系統( 「somecommand」, 「-spaced選項」);

由於當您通過system()調用列表時,它不會像使用單個參數調用一樣在空間上中斷參數。

1

還要小心雙引號 - 在Unix shell上這會擴展變量。有些是顯而易見的(如$foo\t),但有些不是(如!foo)。

爲了安全起見,請使用單引號!

0

如果正常的方式不起作用,嘗試用%20代替空格。

這對我來說,在處理SSH和其他域樣式的命令如auto_smb

0

我也想指出的是,如果你使用的命令行參數的shell腳本(sh文件)的一部分,那麼在腳本,你需要用引號括起來的說法。所以,如果您的命令看起來像

>scriptName.sh arg1 arg2 

而且ARG1是你的路徑中有空格的話中的shell腳本,你需要把它稱爲「$ ARG1」,而不是$ ARG1

Here are the details

相關問題