The sort order for many commands (incl. bash
glob, ls
, sort
) is based on your current locale settings.
You can force the collation by setting the LC_COLLATE
environment variable. Setting it to C will perform a comparison on byte values.
On my system (en_US.utf8):
sh$ touch eleve
sh$ touch élève
sh$ touch Eleve
sh$ touch élève
sh$ touch ?kta
sh$ touch ?sterreich
sh$ ls
?kta eleve Eleve élève élève ?sterreich pommes
sh$ LC_COLLATE=fr_FR.utf8 ls
?kta eleve Eleve élève élève ?sterreich pommes
sh$ LC_COLLATE=sv_SE.utf8 ls
eleve Eleve élève élève pommes ?kta ?sterreich
sh$ LC_COLLATE=C ls
Eleve eleve pommes élève ?kta élève ?sterreich
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…