Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
unix如何处理带有空格和参数的完整路径名?_Unix_Path - Fatal编程技术网

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

unix如何处理带有空格和参数的完整路径名?,unix,path,Unix,Path,unix如何处理带空格和参数的完整路径名? 在windows中,我们引用路径并在后面添加命令行参数,在unix中如何 "c:\foo folder with space\foo.exe" -help 更新: 我的意思是如何从命令行参数中识别路径。如果愿意,您可以引用,也可以使用前面的\来转义空格,但大多数UNIX路径(Mac OS X除外)中没有空格 /Applications/Image\ Capture.app/Contents/MacOS/Image\ Capture "/Appli

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

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

"/path/with/spaces in it/to/a/file"
somecommand -spaced\ option
somecommand "-spaced option"
somecommand '-spaced option'
这是假设你正在从一个外壳上运行。如果您正在编写代码,通常可以直接传递参数,以避免出现以下问题:

perl中的示例。而不是做:

打印(“代码样本”)系统(“somecommand-间隔选项”)

你能行

打印(“代码样本”)系统(“somecommand”,“空格选项”)


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

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


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

如果常规方法不起作用,请尝试用
%20
替换空格


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

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

>scriptName.sh arg1 arg2
arg1是有空格的路径,那么在shell脚本中,您需要将其称为“$arg1”,而不是$arg1


您能否举例说明“从命令行参数识别路径”的含义?可能值得开始一个新问题,因为每个人都回答了第一部分。我想你的意思是“避开空格”。此外,有时,你可能希望用引号括住整个路径,例如:“/foo\folder\with\space/foo”