bashのマニュアルページによると:
GLOBIGNORE
A colon-separated list of patterns defining the set of filenames
to be ignored by pathname expansion. If a filename matched by a
pathname expansion pattern also matches one of the patterns in
GLOBIGNORE, it is removed from the list of matches.
しかし実際には...
$ bash --noprofile --norc
bash-4.2$ touch .bar
bash-4.2$ echo .*
. .. .bar
bash-4.2$ GLOBIGNORE=.
bash-4.2$ echo .*
.bar
..
一致のリストから削除されるのはなぜですか?私の知る限り、パターン
.
は一致しません..
か?
GLOBIGNORE
のみのパターンを無視.
し..
、GLOBIGNOREがファイル名ではなくファイルパスをフィルタリングするだけであることに気付きました。GLOBIGNORE=.; echo .*
は含まれ.
ません..
が、GLOBIGNORE=.; echo ./.*
(またはecho /bin/.*
)は含まれます!無視する.
と、..
あなたが必要とするように、すべてのグロブから、それが見えるshopt -s extglob
とGLOBIGNORE='?(*/)@(.|..)'
。