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