ssh1% cat temp
sarah
saab
marrrrrrrrra
marrrrrrrtha
ssh1% grep ar*a temp
grep: No match.
这不应该是输出吗?
sarah saab marrrrrra
我尝试在 Windows 10 上使用 putty 和 nxclient。
答案1
您正在使用csh
,它会看到*
并尝试将其扩展为壳球并失败了。也就是说,csh
这里说的是“不匹配”,而不是grep
。不像伯恩家族贝壳,csh
不会将不可扩展的全局模式传递给命令,因此您必须引用它才能将csh
其释放到grep
.
我建议在这里使用单引号,因为您不想这样做插将变量放入字符串中:
% grep 'ar*a' temp
sarah
saab
marrrrrrrrra
在这种情况下,双引号也可以使用,因为您的模式不包含$
,但我还是建议在这里使用单引号。在允许您半互换使用引号的语言(例如 shell、Perl 等)中,仔细考虑使用哪些引号是一个值得养成的习惯。我们这里不需要字符串插值,因此我们将选择不使用允许它的引用样式。
顺便说一句,您也应该在 Bourne 系列 shell 下引用 RE 模式。正如迈克·瓦格纳(Mike Wagner)在上面的评论中暗示的那样,因为正则表达式和全局模式使用许多相同的特殊字符,有时你可以编写一个 RE 模式发生也匹配某些文件,因此意外地被 shell 扩展。