git bash中的正斜杠与文件路径的反斜杠

时间:2016-11-03 08:14:29

标签: git bash directory command

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

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

git diff > D:\Patches\afterWGComment.txt  

PatchesafterWGComment.txt

中创建文件D:/
git diff > D:/Patches/afterWGComment.txt  

afterWGComment.txt

中正确创建文件D:/Patches/

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

4 个答案:

答案 0 :(得分:5)

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

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

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

$ echo '\$HOME'
\$HOME

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

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

答案 1 :(得分:2)

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

D:\\Patches\\afterWGComment.txt

另外,你可以将你的字符串放在单引号中,这将使所有字符都是字面的:

'D\Patches\afterWGComment.txt'

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

答案 2 :(得分:1)

Linux中的Backslash (\)通常意味着escape character。所以在你的情况下,反斜杠是转义字符串。尝试使用cd "D:\Patches\afterWGComment.txt",您可以看到差异。

答案 3 :(得分:0)

反斜杠在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

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

或者:

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

引用并不简单,自1660年以来,它已经提供了一长串详细信息。