globbingでは、zshから2つの整数(2〜57など)でファイル範囲(事前順)を指定したいと思います。
例:「特定のワイルドカードパターンに一致するパスの下にアルファベット順にファイル2〜57を選択します。」
角かっこを使うと効果があると思います。
for x in /foo/bar/*[2-57]; do print $x; done
しかし、zshは明らかに2
私が。どんなアイデアがありますか?どうすればいいですか?5
2
57
ベストアンサー1
[2-57]
2
3
、、、、4
および5
zshの7
他のすべてのワイルドカードおよび正規表現構文で構成される文字セット。グローバルパターンは、*[2-57]
最後の文字がこの5つの数字のいずれかであるすべてのファイル名と一致します。
構文を誤って覚えていると思います。[m,n]
グローバル予選。グローバル修飾子は常にパターンの末尾の括弧内に配置され、範囲区切り文字はカンマです。モードは*([2,57])
2次、3次、… 、57次戦まで拡張される。デフォルトの拡張順序は辞書式の順序です(numeric_glob_sort
このオプションが設定されている場合は、いくつかの特別な魔法を使用して数字を数字で並べ替えます)。o
または、O
glob修飾子を使用してこれを制御することもできます(たとえば、最新*(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>
あります。*
たとえば、file58
match *<2-57>
、file5
match *
part、8
match <2-57>
part などがあります。このモードは*[^0-9]<2-57>
この問題を防ぎます。