代码之家  ›  专栏  ›  技术社区  ›  CiNN

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

  •  23
  • CiNN  · 技术社区  · 16 年前

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

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

    更新:

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

    7 回复  |  直到 11 年前
        1
  •  38
  •   DonBecker    9 年前

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

     "/foo folder with space/foo" --help
     /foo\ folder\ with\ space/foo --help
    
        2
  •  10
  •   Kyle Cronin    16 年前

    如果愿意,可以引用,也可以使用前面的\来转义空格,但是大多数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会将整个字符串放在一个变量中——你不必解析多个参数就可以得到整个路径。

        3
  •  3
  •   zigdon    16 年前

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

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

    这是假设你是从一个贝壳跑出来的。如果编写代码,通常可以直接传递参数,从而避免出现以下问题:

    perl中的示例。而不是:

    print("code sample"); 系统(“somecommand-spaced选项”);

    你可以的

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

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

        4
  •  1
  •   Fernando Barrocal    16 年前

    可以引用整个路径,如在windows中,也可以转义空格,如:

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

    两种方法都可以!

        5
  •  1
  •   Jason Cohen    16 年前

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

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

        6
  •  0
  •   atwixtor    10 年前

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

    在处理SSH和其他域样式的命令时,这对我很有用,比如 auto_smb .

        7
  •  0
  •   Community CDub    8 年前

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

    >scriptName.sh arg1 arg2
    

    arg1是有空格的路径,在shell脚本中,您需要将它称为“$arg1”,而不是$arg1

    Here are the details