当使用?!在 perl 正则表达式中,bash 将其解释为通过命令历史记录进行搜索

当使用?!在 perl 正则表达式中,bash 将其解释为通过命令历史记录进行搜索

问题很简单,但我无法解决。

我有以下 perl 正则表达式:

echo ... | grep -P "(?i)(v(ersion)?)\s?(?!0)\d(\.|,)\d{1,}"

这应该匹配描述某个版本的每个字符串(例如V2,0version 1.2)。但是当版本以 开头时,它不匹配V0...。但是,当我执行此操作时,我收到错误,-bash: !0: event not found因为!<string>它用于搜索命令历史记录并执行最新命中。

这基本上破坏了我的 perl 正则表达式。我怎样才能避免 shell 将其解释为快捷方式?

答案1

使用单引号而不是双引号来保护你的正则表达式免受 shell 的攻击。

相关内容