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

时间:2020-03-05 18:49:41  来源:igfitidea点击:

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

"c:\foo folder with space\foo.exe" -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"

在Mac OS X下,它们都引用相同的可执行文件。

我不确定如果将上述任何路径作为参数传递给程序,那么对于识别路径的含义是不确定的,shell会将整个字符串放在一个变量中,而我们不必解析多个参数即可获取整个路径。

回答

我们可以像在Windows中那样引用整个路径,也可以像这样对空格进行转义:

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

两种方式都行!

回答

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

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

回答

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

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

这是假设我们正在从Shell运行。如果我们正在编写代码,通常可以直接传递参数,从而避免出现问题:

perl中的示例。而不是做:

print("代码示例");system(" somecommand分隔的选项");

你可以做

print("代码示例");system(" somecommand","-空格选项");

因为当我们传递system()调用列表时,它不会像使用单个参数调用那样中断空格上的参数。

回答

也要小心双引号-在Unix shell上,这会扩展变量。有些是显而易见的(例如$ foo和\ t),而有些则不是(例如!foo`)。

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