将正则表达式从 bash 翻译成 zsh

Translate Regex from bash to zsh

我最近将 macOS 更新到新的 Catalina 版本,并按照建议从 bash 切换到 zsh。 问题是在我的工作流程中,我们做了一些需要正则表达式的文件操作,我不知道如何让它与 zsh 一起工作。

这是我的两个正则表达式:

ls | grep ^[0-9].*.chunk.js$
ls | grep ^main.*.chunk.js$

它们应该匹配以下文件:main.d9a85e98.chunk.js2.c2cbac0f.chunk.js

有什么想法或资源吗?

谢谢!

引用正则表达式以防止在 grep 看到它之前 shell 尝试扩展字符串。

# Ignoring the issue of parsing the output of ls
ls | grep '^[0-9].*.chunk.js$'
ls | grep '^main.*.chunk.js$'

正则表达式通常可以解释为 shell 模式,bashzsh 都将尝试在 运行 命令之前展开。 shell 都可以选择将不匹配的模式视为错误或文字字符串。默认情况下,bash 将其视为文字字符串,而 zsh 将其视为错误。在任一 shell 中,"right" 要做的事情是引用一个字符串,您绝对这样做 而不是 打算将其扩展为模式。 bash 只是让您更频繁地摆脱它。

bash 中,这是由 failglob 选项控制的,该选项默认关闭。

zsh中,它由NOMATCH选项控制,默认打开。

zsh 也有更丰富的模式语言,因此在 bash 中可能不会导致模式匹配的字符串可能会在 zsh 中产生。结果是一样的:grep 没有看到您想要的参数。