我最近更新macOS新卡塔利娜版本,并根据建议从bash切换到zsh的。 问题是,在我的工作流,我们做到这一点需要正则表达式的一些文件操作,我无法弄清楚如何使它与zsh的工作。
这里是我的两个正则表达式:
ls | grep ^[0-9].*.chunk.js$
ls | grep ^main.*.chunk.js$
他们应符合下列文件:main.d9a85e98.chunk.js
和2.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图案,其中两个bash
和zsh
将尝试运行命令之前扩大。
两壳具有治疗non-matching图案作为错误或文字string的选项。默认情况下,bash
将其视为文本字符串,而zsh
将其视为一个错误。该"right"东西要么shell做的是引用,你绝对不打算扩大为图案的string。 bash
只是让你摆脱它更频繁。
在bash
,这是由failglob
选项,这是默认关闭控制。
在zsh
,它是由NOMATCH
选项,该选项默认是打开的控制。
zsh
也有更丰富的模式语言,因此,不会导致在bash
模式匹配字符串可能在zsh
这样做。其结果是一样的:grep
没有看到你想要它的参数。