unix如何处理带有空格和参数的完整路径名?

时间:2008-09-08 21:57:42

标签: unix path

unix如何使用空格和参数处理完整路径名? 在windows中我们引用路径并在之后添加命令行参数,它在unix中是什么?

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

更新

我的意思是如何从命令行参数中识别路径。

7 个答案:

答案 0 :(得分:38)

您可以像上面的Windows示例一样引用它,也可以使用反斜杠转义空格:

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

答案 1 :(得分: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会将整个字符串放在一个变量中 - 你不必解析多个参数获得整个路径。

答案 2 :(得分:3)

由于空格用于分隔命令行参数,因此它们必须从shell中转义。这可以使用反斜杠()或引号:

来完成
"/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"); system(“somecommand”,“ - spaced option”);

因为当你传递system()调用一个列表时,它不会破坏空格中的参数,就像它使用单个参数调用一样。

答案 3 :(得分:1)

您可以像在窗口中一样引用整个路径,也可以像以下一样转义空格:

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

两种方式都有效!

答案 4 :(得分:1)

另外要注意双引号 - 在Unix shell上,这会扩展变量。有些是显而易见的(例如$foo\t),但有些则不是(如!foo)。

为安全起见,请使用单引号!

答案 5 :(得分:0)

如果正常方法不起作用,请尝试用%20代替空格。

在处理SSH和其他域式命令(如auto_smb

时,这对我有用

答案 6 :(得分:0)

我还想指出,如果您使用命令行参数作为shell脚本(.sh文件)的一部分,那么在脚本中,您需要将参数括在引号中。所以如果你的命令看起来像

>scriptName.sh arg1 arg2

arg1是你的路径,有空格,然后在shell脚本中,你需要将它称为“$ arg1”而不是$ arg1

Here are the details