unix如何使用空格和参数处理完整路径名? 在windows中我们引用路径并在之后添加命令行参数,它在unix中是什么?
"c:\foo folder with space\foo.exe" -help
更新
我的意思是如何从命令行参数中识别路径。
答案 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