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

A C*_*pos 1 regex bash zsh macos-catalina

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

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

ls | grep ^[0-9].*.chunk.js$
ls | grep ^main.*.chunk.js$
Run Code Online (Sandbox Code Playgroud)

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

任何想法或资源?

谢谢!

che*_*ner 6

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

# Ignoring the issue of parsing the output of ls
ls | grep '^[0-9].*.chunk.js$'
ls | grep '^main.*.chunk.js$'
Run Code Online (Sandbox Code Playgroud)

正则表达式通常可以解释为一个壳的图案,其中两个bashzsh将尝试运行该命令之前扩大。两个 shell 都可以选择将不匹配的模式视为错误或文本字符串。默认情况下,bash将其视为文字字符串,而zsh将其视为错误。在任一 shell 中“正确”的做法是引用一个您绝对打算扩展为模式的字符串。bash只是让你更频繁地摆脱它。

在 中bash,这由failglob选项控制,默认情况下是关闭的。

在 中zsh,它由NOMATCH选项控制,默认情况下该选项处于打开状态。

zsh还具有更丰富的模式语言,因此可能不会导致模式匹配的字符串bashzsh. 结果是一样的:grep没有看到你想要的参数。