git bash 中文件路径的正斜杠与反斜杠
Forward slash vs backward slash for file path in git bash
我是运行这两个命令在Gitbash.
为什么他们的行为不同?他们不应该做同样的事情还是我错过了什么?
git diff > D:\Patches\afterWGComment.txt
在 D:/
中创建文件 PatchesafterWGComment.txt
git diff > D:/Patches/afterWGComment.txt
在 D:/Patches/
中正确创建文件 afterWGComment.txt
请注意 D:/Patches/
文件夹出现在 运行 上述命令之前。
那么 Linux 中的 Backslash (\)
通常表示 escape character
。因此,在您的情况下,反斜杠正在转义字符串。尝试使用 cd "D:\Patches\afterWGComment.txt"
,您可以看到差异。
反斜杠是用于转义元字符的转义字符。这意味着你需要转义escape:
D:\Patches\afterWGComment.txt
或者您可以将字符串放在单引号中,这将使所有字符变为文字:
'D\Patches\afterWGComment.txt'
一些元字符:*
、~
、$
、!
、...
Bash 将反斜杠视为转义字符,这意味着它后面的符号按字面解释,反斜杠本身被删除。
$ echo $HOME
/home/user
$ echo $HOME
$HOME
在Windows下,反斜杠用作路径分隔符,这会带来一些不便。幸运的是,单引号内的反斜杠字符失去了它的特殊含义,并按字面意义处理(与任何其他字符一样,单引号除外):
$ echo '$HOME'
$HOME
因此,如果您要将 Windows 路径复制并粘贴到 Git bash 中,请将其放在单引号内:
git diff > 'D:\Patches\afterWGComment.txt'
反斜杠在 Unix 中(因此在 Linux 中)有着很长的历史,意思是:引用下一个字符。
在shell(输入命令的地方)有3种引用方式:
- 反引号 (
\
)
- 单引号 (
'
)
- 双引号 (
"
)
按照从强到软的顺序。例如,$
是shell中的一个特殊字符,这样会打印一个变量的值:
$ a=Hello
$ echo $a
Hello
但这不会:
$ echo $a
$a
$ echo '$a'
$a
$ echo "$a"
Hello
在大多数情况下,反斜杠会使下一个字符成为 "not special",并且通常会转换为相同的字符:
$ 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年代开始就需要一长串的细节。
我是运行这两个命令在Gitbash.
为什么他们的行为不同?他们不应该做同样的事情还是我错过了什么?
git diff > D:\Patches\afterWGComment.txt
在 D:/
PatchesafterWGComment.txt
git diff > D:/Patches/afterWGComment.txt
在 D:/Patches/
afterWGComment.txt
请注意 D:/Patches/
文件夹出现在 运行 上述命令之前。
那么 Linux 中的 Backslash (\)
通常表示 escape character
。因此,在您的情况下,反斜杠正在转义字符串。尝试使用 cd "D:\Patches\afterWGComment.txt"
,您可以看到差异。
反斜杠是用于转义元字符的转义字符。这意味着你需要转义escape:
D:\Patches\afterWGComment.txt
或者您可以将字符串放在单引号中,这将使所有字符变为文字:
'D\Patches\afterWGComment.txt'
一些元字符:*
、~
、$
、!
、...
Bash 将反斜杠视为转义字符,这意味着它后面的符号按字面解释,反斜杠本身被删除。
$ echo $HOME
/home/user
$ echo $HOME
$HOME
在Windows下,反斜杠用作路径分隔符,这会带来一些不便。幸运的是,单引号内的反斜杠字符失去了它的特殊含义,并按字面意义处理(与任何其他字符一样,单引号除外):
$ echo '$HOME'
$HOME
因此,如果您要将 Windows 路径复制并粘贴到 Git bash 中,请将其放在单引号内:
git diff > 'D:\Patches\afterWGComment.txt'
反斜杠在 Unix 中(因此在 Linux 中)有着很长的历史,意思是:引用下一个字符。
在shell(输入命令的地方)有3种引用方式:
- 反引号 (
\
) - 单引号 (
'
) - 双引号 (
"
)
按照从强到软的顺序。例如,$
是shell中的一个特殊字符,这样会打印一个变量的值:
$ a=Hello
$ echo $a
Hello
但这不会:
$ echo $a
$a
$ echo '$a'
$a
$ echo "$a"
Hello
在大多数情况下,反斜杠会使下一个字符成为 "not special",并且通常会转换为相同的字符:
$ 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年代开始就需要一长串的细节。