2つの論理的な違いは何ですか
ll -d !(.*@(ry|rc))
ll -d !(.*{ry,rc})
?
私のホームディレクトリでそれを使用すると、2番目は一致し、1.bash_history
番目.xinputrc
は一致しません。
メモ:
$ shopt extglob
extglob on
ベストアンサー1
ll -d -- !(.*{ry,rc})
ワイルドカードと中かっこ拡張を組み合わせます。まず、これを次のように拡張します。
ll -d -- !(.*ry) !(.*rc)
フレーズは個別に展開されます。最初の一致.inputrc
(bash -O extglob
しかし、ksh
その文法のソースやシミュレーションzsh
では一致しませんksh
。これは隠しファイルであり、ドットファイルは明示的に要求されていないためです)。
これらのglobがどのファイルとも一致しないディレクトリでこれを確認できます(この場合、globは変更されずに残り、bash
これは解決できるもう1つのバグ機能ですshopt -s failglob
)。たとえば、読み取り権限のないディレクトリの途中で:
$ chmod a-r .
$ bash -O extglob -c 'echo ll -d -- !(.*{ry,rc})'
ll -d -- !(.*ry) !(.*rc)
そして
ll -d -- !(.*@(ry|rc))
それは群れです。
ここでは、次のこともできます。
ll -d -- !(.*r[cy])
または:
ll -d -- !(.*rc|.*ry)
bash
この拡張にはおよびも含まれています.
。..
そのファイルを除外したいのですが(おそらくそうであると確信しています)、隠されたファイルは引き続き含めるには、次のことを行う必要があります。
shopt -s dotglob
ll -d -- !([.]*@(rc|ry))
または、明示的に除外することもできます。
ll -d -- !(.*@(rc|ry)|.|..)
では、zsh -o extendedglob
次の操作を行います。
ll -d -- ^.*(rc|ry)(D)
(このglobに対してのみ有効になります(D)
)。dotglob