Hi, Bob and Eric, Thanks muchly for the help!
On Mon, Jan 28, 2008 at 04:57:22PM -0700, Bob Proulx wrote: > Eric Blake wrote: > > According Alan Mackenzie: > > | % ls [A-Z]* > > | . Sadly, ls ignores my intentions and undiscerningly prints a list of > > | all files whose names begin with a letter, big or small. > > Actually, it follows your (unintended) directions, thanks to your > > current locale, which does a collation sort. You aren't doing > > [A-Za-z], but [AaBb...Z], because your current locale prefers > > case-insensitive collation. Change your locale (try LC_COLLATE=C or > > LC_ALL=C) to see the difference. Yes, this works! Ah. I've got $LANG set to en_GB. Who did this? How dare they! OK, I did this myself, somehow, presumably during installation of Debian Sarge. Why didn't "they" tell me I was messing up my shell? Why do I feel so stupid? (OK, don't answer that one!) More to the point, where are these variables (LANG, LC_{ALL,COLLATE,CTYPE,MESSAGES,NUMERIC} documented? They're mentioned skimpily in the bash man page, but where are they fully documented? What is a "locale category"? What set of values can these variables take? _How_ are they "used"? > Or in the new expression syntax say that you are looking for upper > case letters explicitly. > > ls -d [[:upper:]]* > That should work regardless of locale setting. OK. I'll use that if I really have to, but I'd prefer [A-Z] to work right. Again, thanks! > Bob