# minimal example file
printf "hey\$you\nhey\$me\n" > test
cat test
# hey$you
# hey$me
简单grep
来说:
grep -F "hey$you" test
# hey$you
# hey$me
即,当只有第一行应该匹配时,两行都匹配。
如果我逃脱$
,它会按预期工作:
grep -F "hey\$you" test
# hey$you
然而,这违背了我的理解-F
/--fixed-strings
将模式解释为一组固定字符串(即强制
grep
表现为fgrep
)。
也没有什么man fgrep
特别$
的。
在 macOS 和 Ubuntu 上复制
答案1
这壳正在扩展$you
为(可能为空)变量,因为您使用了“弱”(双)引用。
您可以通过设置 shell 的x
选项来确认这一点:
$ grep -F "hey$you" test
+ grep --color=auto -F hey test
# hey$you
# hey$me
正如您所看到的,"hey$you"
变得简单hey
- 与两行相匹配。
相反,在模式周围使用强(单)引号:
$ grep -F 'hey$you' test
+ grep --color=auto -F 'hey$you' test
# hey$you