Today, I realised that GLOBIGNORE doesn't work at all like ksh's
FIGNORE.

With

GLOBIGNORE=x*

we're not filtering out files whose *name* starts with "x" from
globs but those whose *path* starts with "x".

In

echo *

files whose name starts with "x" will be excluded, but not in

echo ./*

I think the documentation should be clarified, because at the
moment it implies GLOBIGNORE applies to file names (like for
ksh's FIGNORE), not file paths.

Where it becomes borderline a bug is about "." and "..".

The doc says they're always excluded when GLOBIGNORE is
non-empty.

That's true for */* or .* for instance, but not for ./.* or .*/x
for instance.

$ bash -c 'GLOBIGNORE=x*; echo .*'
.*
$ bash -c 'GLOBIGNORE=x*; echo ./.*'
./. ./..
$ bash -c 'GLOBIGNORE=x*; echo .*/a'
./a ../a

To truely exclude . and .., one needs:

shopt -s extglob
GLOBIGNORE='?(*/)@(.|..)'

-- 
Stephane


Reply via email to