【问题标题】:Forward slash vs backward slash for file path in git bashgit bash中文件路径的正斜杠与反斜杠
【发布时间】:2017-03-16 17:58:54
【问题描述】:

我在 Git bash 中运行这两个命令。

为什么他们的行为不同?他们不应该做同样的事情还是我错过了什么?

git diff > D:\Patches\afterWGComment.txt  

D:/ 中创建文件PatchesafterWGComment.txt

git diff > D:/Patches/afterWGComment.txt  

D:/Patches/中正确创建文件afterWGComment.txt

请注意,D:/Patches/ 文件夹在运行上述命令之前存在。

【问题讨论】:

    标签: git bash directory command


    【解决方案1】:

    Linux 中的Backslash (\) 通常表示escape character。因此,在您的情况下,反斜杠正在转义字符串。尝试使用cd "D:\Patches\afterWGComment.txt",您会看到不同。

    【讨论】:

      【解决方案2】:

      反斜杠是用于转义元字符的转义字符。这意味着您需要逃脱转义:

      D:\\Patches\\afterWGComment.txt
      

      您可以将字符串放在单引号中,这将使所有字符变为文字:

      'D\Patches\afterWGComment.txt'
      

      一些元字符:*~$!、...

      【讨论】:

        【解决方案3】:

        Bash 将反斜杠视为转义字符,这意味着它后面的符号按字面意思解释,反斜杠本身被删除。

        $ echo $HOME
        /home/user
        $ echo \$HOME
        $HOME
        

        在 Windows 下,反斜杠用作路径分隔符,这会带来一些不便。幸运的是,在单引号内,反斜杠字符失去了它的特殊含义并被按字面意思对待(与任何其他字符一样,除了单引号):

        $ echo '\$HOME'
        \$HOME
        

        因此,如果您要将 Windows 路径复制并粘贴到 Git bash 中,请将其放在单引号内:

        git diff > 'D:\Patches\afterWGComment.txt'
        

        【讨论】:

        • 如果我使用双引号而不是单引号是否安全?我通常认为它们相同。
        • @SauravSahu 不,反斜杠仍然充当双引号内的转义字符
        • “一些不便”是轻描淡写的。你不能用标签扩展引用的路径等。
        【解决方案4】:

        反斜杠在 Unix(因此在 Linux)中有着很长的历史意义:引用下一个字符。

        在shell(输入命令的地方)中有三种引用方式:

        • 反引号 (\)
        • 单引号 (')
        • 双引号 (")

        按照从强到弱的顺序。例如,$ 是 shell 中的特殊字符,这将打印变量的值:

        $ a=Hello
        $ echo $a
        Hello
        

        但这不会:

        $ echo \$a
        $a
        
        $ echo '$a'
        $a
        
        $ echo "$a"
        Hello
        

        在大多数情况下,反斜杠会使下一个字符“不特殊”,并且通常会转换为相同的字符:

        $ echo \a
        a
        

        Windows 决定使用 \ 来表示与字符 / 在 Unix 文件路径中的含义相同。
        要在任何带有反斜杠的 Unix 类 shell 中编写路径,您需要引用它们:

        $ echo \\
        \
        $ echo '\'
        \
        $ echo "\\"
        \
        

        对于您提供的示例,只需引用路径:

        $ echo "Hello" > D:\\Patches\\afterWGComment.txt
        

        这将创建包含单词Hello 的文件afterWGComment.txt

        或者:

        $ echo "Hello" > 'D:\Patches\afterWGComment.txt'
        $ echo "Hello" > "D:\\Patches\\afterWGComment.txt"
        $ echo "Hello" > "D:/Patches/afterWGComment.txt"
        

        引用并不简单,它需要自 1660 年代以来的一长串细节。

        【讨论】:

          猜你喜欢
          • 2013-07-23
          • 2016-11-20
          • 2014-02-04
          • 1970-01-01
          • 2016-08-07
          • 2012-08-30
          • 1970-01-01
          • 2012-11-16
          • 1970-01-01
          相关资源
          最近更新 更多