我目前正在尝试遍历一组目录,但只有我关心的那些。
$ ls -d */
cfdpost_statefiles/ p050L0260/ p050L0510/ p060L0390/ p070L0260/ p070L0510/ p092L0390/ p097L0260/ p110L0390/ p131L0325/ p150L0510/ profiles/
ERCOFTAC_TestSettings/ p050L0390/ p060L0260/ p060L0510/ p070L0390/ p084L0510/ p094L0325/ p100L0510/ p125L0510/ p136L0260/ p162L0260/ settings/
我想匹配除以andp###*
开头的目录之外的所有目录。p125
p150
如果我只是用管道做模式,我会得到:
$ for dir in ./p(125|150)*(/); echo $dir
./p125L0510
./p150L0510
但是,如果我尝试使用它在文档中^
显示的内容:
$ for dir in ./p^(125|150)*(/); echo $dir
zsh: no matches found: ./p^(125|150)*(/)
任何想法如何进行?
EXTENDED_GLOB
需要为 zsh 设置选项。要查看是否已设置,请运行
setopt
以显示已设置的选项:如果未设置,请运行
setopt extended_glob
.注意:这将导致
~
,^
和#
不被扩展。我的问题是,虽然我在 shell 中设置了这个选项,但我在脚本中运行了 for 循环。该脚本启动自己的 shell 以在其中运行,因此没有设置选项。
要解决此特定问题,请放入
setopt extendedglob
脚本本身。