25

unix 如何处理带有空格和参数的完整路径名?
在 windows 中我们引用路径并在后面添加命令行参数,在 unix 中如何?

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

更新:

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

4

7 回答 7

41

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

 "/foo folder with space/foo" --help
 /foo\ folder\ with\ space/foo --help
于 2008-09-08T22:00:59.633 回答
10

您可以根据需要引用,或者您可以使用前面的 \ 转义空格,但大多数 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 会将整个字符串放在一个变量中——你不必解析多个参数来获取整个路径。

于 2008-09-08T21:58:52.960 回答
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() 调用列表时,它不会像使用单个参数调用那样破坏空格上的参数。

于 2008-09-08T22:04:29.483 回答
1

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

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

两种方法都行!

于 2008-09-08T21:59:52.177 回答
1

还要小心双引号——在 Unix shell 上,这会扩展变量。有些是显而易见的(如$foo\t),但有些不是(如!foo)。

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

于 2008-09-08T22:18:36.063 回答
1

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

>scriptName.sh arg1 arg2

arg1 是您的路径,其中包含空格,然后在 shell 脚本中,您需要将其称为“$arg1”而不是 $arg1

这是详细信息

于 2017-01-03T11:40:46.450 回答
0

如果正常方法不起作用,请尝试用%20.

在处理 SSH 和其他域风格的命令(如auto_smb.

于 2015-04-02T17:15:46.320 回答