私は現在一連のディレクトリを循環しようとしていますが、興味のあるディレクトリだけを循環しようとしています。
$ 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/
p###*
で始まるディレクトリ以外のすべてのディレクトリを一致させたい。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)*(/)
進行方法のアイデアはありますか?
答え1
EXTENDED_GLOB
zshの設定オプションが必要です。
設定されていることを確認するには、以下を実行してsetopt
設定されたオプションを表示します。
$ setopt | grep glob
extendedglob
設定されていない場合を実行しますsetopt extended_glob
。
注: これにより~
、^
および#
拡張できなくなります。
私の問題はシェルでこのオプションを設定しましたが、スクリプトでforループを実行しています。スクリプトは実行用に独自のシェルを起動するため、このオプションは設定されません。
setopt extendedglob
この特定の問題を解決するには、スクリプト自体を挿入してください。