在 .gitconfig 中转义反斜杠

Escaping backslash in .gitconfig

我正在尝试在我的 .gitconfig 中设置一个过滤器,它将一个包含反斜杠的字符串替换为另一个字符串,也包含反斜杠。

clean = sed 's|foo|bar|g'
smudge = sed 's|foo|bar|g'

只要 foobar 不包含任何 \,此示例就可以运行。

我知道,我应该转义 \,但我无法让它正常工作。 有人可以指导我完成这个工作的过程吗?

通常,要转义反斜杠,将其加倍。如果 \x 变为 x,则 \ 变为 \。此反斜杠解释 "eats" 反斜杠,但如果它们以反斜杠为前缀则不是。

它通过了 Git,shell 吃掉了它(将反斜杠后跟一些其他字符解释为特殊字符),因此如果将此命令提供给 shell,再次加倍。现在最终结果中的一个反斜杠在输入中由 four 表示。

如果 shell 将其传递给像 sed 这样专门处理反斜杠的命令,请再次将其加倍。现在一个反斜杠是八个!

如果该命令将字符串传递给另一个执行反斜杠解释的命令,您将需要再次将其加倍,依此类推。出于这个原因,我们在 shell(和其他语言)中有其他引用机制:在单引号内,反斜杠不再特殊(不再被吃掉),因此您可以将使用单引号所需的反斜杠数量减半。 (例如,与 Python 中的 "raw" 字符串进行比较。)但是,对于这种特殊情况,八个反斜杠可能并不比仔细的单引号和四个反斜杠差多少。