将正则表达式从 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.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$'
正则表达式通常可以解释为 shell 模式,bash
和 zsh
都将尝试在 运行 命令之前展开。
shell 都可以选择将不匹配的模式视为错误或文字字符串。默认情况下,bash
将其视为文字字符串,而 zsh
将其视为错误。在任一 shell 中,"right" 要做的事情是引用一个字符串,您绝对这样做 而不是 打算将其扩展为模式。 bash
只是让您更频繁地摆脱它。
在 bash
中,这是由 failglob
选项控制的,该选项默认关闭。
在zsh
中,它由NOMATCH
选项控制,默认打开。
zsh
也有更丰富的模式语言,因此在 bash
中可能不会导致模式匹配的字符串可能会在 zsh
中产生。结果是一样的:grep
没有看到您想要的参数。
我最近将 macOS 更新到新的 Catalina 版本,并按照建议从 bash 切换到 zsh。 问题是在我的工作流程中,我们做了一些需要正则表达式的文件操作,我不知道如何让它与 zsh 一起工作。
这是我的两个正则表达式:
ls | grep ^[0-9].*.chunk.js$
ls | grep ^main.*.chunk.js$
它们应该匹配以下文件: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$'
正则表达式通常可以解释为 shell 模式,bash
和 zsh
都将尝试在 运行 命令之前展开。
shell 都可以选择将不匹配的模式视为错误或文字字符串。默认情况下,bash
将其视为文字字符串,而 zsh
将其视为错误。在任一 shell 中,"right" 要做的事情是引用一个字符串,您绝对这样做 而不是 打算将其扩展为模式。 bash
只是让您更频繁地摆脱它。
在 bash
中,这是由 failglob
选项控制的,该选项默认关闭。
在zsh
中,它由NOMATCH
选项控制,默认打开。
zsh
也有更丰富的模式语言,因此在 bash
中可能不会导致模式匹配的字符串可能会在 zsh
中产生。结果是一样的:grep
没有看到您想要的参数。