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`)。
为了安全起见,请使用单引号!