On Sun, Jun 6, 2021 at 1:31 PM Ilkka Virta <itvi...@gmail.com> wrote:
> Personally, I'd just want an option to always make . and .. hidden from > globs. Or rather, > to never generate . or .. as a pathname component via globbing. But > without affecting > other behaviour, like dotglob, and without precluding the use of . or .. > as static parts of the > path. > Hmm, looking at the code, this already seems to exist, in lib/glob/glob.c: /* Global variable controlling whether globbing ever returns . or .. regardless of the pattern. If set to 1, no glob pattern will ever match `.' or `..'. Disabled by default. */ int glob_always_skip_dot_and_dotdot = 1; I didn't read all the code, but as far as I tested from the git version, that seems to do what I just wanted and seems sensible to me with Nora's examples too. (I changed the filenames from the previous since I started copying their tests now.) $ touch .foo .doo bar quux With dotglob (the first is the same as just *): $ shopt -s dotglob $ echo @(.foo|*) bar .doo .foo quux $ echo !(.foo) bar .doo quux $ echo @(bar|.*) bar .doo .foo Without it: $ shopt -u dotglob $ echo @(.foo|*) bar .foo quux $ echo @(bar|.*) bar .doo .foo No match for . and .. even explicitly (with failglob here): $ echo @(.|..) bash: no match: @(.|..) All files with dotglob unset: $ echo @(.|)* bar .doo .foo quux Maybe I missed some more obscure case, though.