转义.gitconfig中的反斜杠

时间:2017-06-07 15:33:25

标签: git escaping git-config

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

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

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

我知道,我应该逃避\,但我无法让它正常工作。 有人可以指导我完成这项工作吗?

1 个答案:

答案 0 :(得分:0)

一般来说,要逃避反斜杠,请将其加倍。如果\x变为x,则\\变为\。这种反斜杠解释“吃掉”反斜杠,但如果它们以反斜杠为前缀则不行。

它让它通过Git,shell会吃它(解释反斜杠后跟其他一些字符作为特殊字符),所以如果这个命令被送到shell,再加倍。现在,最终结果中的一个反斜杠由输入中的表示。

如果shell将其传递给特殊处理反斜杠的sed命令,请再次加倍。现在一个反斜杠就是八个!

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