我最近更新macOS新卡塔利娜版本,并根据建议从bash切换到zsh的。 问题是,在我的工作流,我们做到这一点需要正则表达式的一些文件操作,我无法弄清楚如何使它与zsh的工作。

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

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

他们应符合下列文件:main.d9a85e98.chunk.js2.c2cbac0f.chunk.js

任何意见或资源?

谢谢!

分析解答

引用正则表达式,以防止任何企图在string的shell膨胀grep看到它之前。

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

正则表达式通常可以解释为一个shell图案,其中两个bashzsh将尝试运行命令之前扩大。 两壳具有治疗non-matching图案作为错误或文字string的选项。默认情况下,bash将其视为文本字符串,而zsh将其视为一个错误。该"right"东西要么shell做的是引用,你绝对不打算扩大为图案的string。 bash只是让你摆脱它更频繁。

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

zsh,它是由NOMATCH选项,该选项默认是打开的控制。

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