git bash中文件路径的正斜杠与反斜杠
Posted
技术标签:
【中文标题】git bash中文件路径的正斜杠与反斜杠【英文标题】:Forward slash vs backward slash for file path in git 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/
文件夹在运行上述命令之前存在。
【问题讨论】:
【参考方案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 年代以来的一长串细节。
【讨论】:
以上是关于git bash中文件路径的正斜杠与反斜杠的主要内容,如果未能解决你的问题,请参考以下文章