以下两个命令的输出相同:
echo 'my\name' | grep 'my\\name'
my\name
并且下一个命令的输出也相同,
echo 'my\name' | grep 'my\\\name'
my\name
有人能解释一下为什么会产生相同的输出吗?为什么额外的反斜杠也不会影响输出的任何变化?
然而,如果我们将 grep 中的反斜杠数量增加到四个,则输出就会消失,
echo 'my\name' | grep 'my\\\\name'
没有输出
请指导我单引号和双引号中 grep 和反斜杠的行为。
答案1
在正则表达式(例如 grep)中使用反斜杠的方式与 shell 解释它的方式不同。shell 可能会将其视为\n
回车符,而无需引号。在正则表达式中,a\
表示“不将下一个字符解释为特殊正则表达式字符,而是将其视为文字字符”。
在此示例中
'my\\\name'
你是说:
查找“my”后跟文字“\”(the \\
),后跟文字“n”(the \n
)。
所以这匹配my\name
下一个例子:
'my\\\\name'
你是说:
查找“my”后跟文字“\”(the \\
),再跟另一个文字“\”(the \\
)。
所以这不匹配my\name
。