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.js和2.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$'
Run Code Online (Sandbox Code Playgroud)
正则表达式通常可以解释为一个壳的图案,其中两个bash和zsh将尝试运行该命令之前扩大。两个 shell 都可以选择将不匹配的模式视为错误或文本字符串。默认情况下,bash将其视为文字字符串,而zsh将其视为错误。在任一 shell 中“正确”的做法是引用一个您绝对不打算扩展为模式的字符串。bash只是让你更频繁地摆脱它。
在 中bash,这由failglob选项控制,默认情况下是关闭的。
在 中zsh,它由NOMATCH选项控制,默认情况下该选项处于打开状态。
zsh还具有更丰富的模式语言,因此可能不会导致模式匹配的字符串bash在zsh. 结果是一样的:grep没有看到你想要的参数。