【问题标题】:how does unix handle full path name with space and arguments?unix 如何处理带有空格和参数的完整路径名?
【发布时间】:2010-09-08 05:24:17
【问题描述】:

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

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

更新:

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

【问题讨论】:

  • 你能举例说明“从命令行参数识别路径”是什么意思吗?可能值得开始一个新问题,因为每个人都回答了第一部分。

标签: unix path


【解决方案1】:

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

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

【讨论】:

  • 我认为你的意思是“逃离空间”
  • 此外,有时您可能希望将整个路径用引号括起来,例如:“/foo\ folder\ with\ space/foo”
【解决方案2】:

您可以根据需要引用,也可以使用前面的 \ 转义空格,但大多数 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】:

    由于空格用于分隔命令行参数,因此必须将它们从 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() 调用一个列表时,它不会像使用单个参数调用那样打破空格上的参数。

    【讨论】:

      【解决方案4】:

      您可以像在 windows 中一样引用整个路径,也可以像在以下位置一样转义空格:

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

      两种方法都行!

      【讨论】:

        【解决方案5】:

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

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

        【讨论】:

          【解决方案6】:

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

          >scriptName.sh arg1 arg2
          

          而 arg1 是包含空格的路径,然后在 shell 脚本中,您需要将其称为“$arg1”而不是 $arg1

          Here are the details

          【讨论】:

            【解决方案7】:

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

            在处理 SSH 和其他域样式命令(如 auto_smb)时,这对我有用。

            【讨论】:

              猜你喜欢
              • 2011-12-22
              • 2021-08-26
              • 2017-02-01
              • 1970-01-01
              • 2021-08-16
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2013-06-23
              相关资源
              最近更新 更多