我正在尝试在我的.gitconfig中设置一个过滤器,它将包含反斜杠的字符串替换为另一个字符串,也包括反斜杠。
clean = sed 's|foo|bar|g'
smudge = sed 's|foo|bar|g'
只要foo
和bar
不包含任何\
,此示例就可以正常运行。
我知道,我应该逃避\
,但我无法让它正常工作。
有人可以指导我完成这项工作吗?
答案 0 :(得分:0)
一般来说,要逃避反斜杠,请将其加倍。如果\x
变为x
,则\\
变为\
。这种反斜杠解释“吃掉”反斜杠,但如果它们以反斜杠为前缀则不行。
它让它通过Git,shell会吃它(解释反斜杠后跟其他一些字符作为特殊字符),所以如果这个命令被送到shell,再加倍。现在,最终结果中的一个反斜杠由输入中的四表示。
如果shell将其传递给特殊处理反斜杠的sed
命令,请再次加倍。现在一个反斜杠就是八个!
如果该命令将字符串传递给另一个执行反斜杠解释的命令,则需要再次将其加倍,依此类推。出于这个原因,我们在shell(以及其他语言)中有其他引用机制:在单引号内,反斜杠不再特殊(不再被吃掉),因此您可以使用单引号将所需的反斜杠数减半。 (与例如Python中的“原始”字符串相比。)但是,对于这种特殊情况,八个反斜杠可能并不比仔细的单引号和四个反斜杠差。