zshの辞書シーケンスマルチビットファイル範囲

zshの辞書シーケンスマルチビットファイル範囲

globbingでは、zshから2つの整数(2〜57など)でファイル範囲(事前順)を指定したいと思います。

例:「特定のワイルドカードパターンに一致するパスの下にアルファベット順にファイル2〜57を選択します。」

角かっこを使うと効果があると思います。

 for x in /foo/bar/*[2-57]; do print $x; done

しかし、zshは明らかに2私が。どんなアイデアがありますか?どうすればいいですか?5257

ベストアンサー1

[2-57]23、、、、4および5zshの7他のすべてのワイルドカードおよび正規表現構文で構成される文字セット。グローバルパターンは、*[2-57]最後の文字がこの5つの数字のいずれかであるすべてのファイル名と一致します。

構文を誤って覚えていると思います。[m,n] グローバル予選。グローバル修飾子は常にパターンの末尾の括弧内に配置され、範囲区切り文字はカンマです。モードは*([2,57])2次、3次、… 、57次戦まで拡張される。デフォルトの拡張順序は辞書式の順序です(numeric_glob_sortこのオプションが設定されている場合は、いくつかの特別な魔法を使用して数字を数字で並べ替えます)。oまたは、Oglob修飾子を使用してこれを制御することもできます(たとえば、最新*(om[2,57])の57ファイルのうち最初のものではなくファイルと一致する)。 。

for x in /foo/bar/*([2,57]); do print $x; done

要求されたものではありませんが、将来の読者に関連していて役に立つかもしれません。存在するかどうかにかかわらず、ファイル2〜57を列挙するには、次の範囲を使用できます。中かっこ表現。この機能はbashとkshにも存在します。

echo hello{2..57}

名前に2から57の数字を含むファイルを一致させるには、パターンを使用できます<2-57>。これはzsh専用です。

$ ls
file1 file2 file3 file57 file58
$ echo file<2-57>
file2 file3 file57

数字も一致する可能性があるため、同様のパターンが期待どおりに機能しない可能性が*<2-57>あります。*たとえば、file58match *<2-57>file5match *part、8match <2-57>part などがあります。このモードは*[^0-9]<2-57>この問題を防ぎます。

おすすめ記事