Ma to związek z ustawieniami regionalnymi. W szczególności kolejność zestawiania jest jedna z niewrażliwością na wielkość liter.
Na przykład, z LC_COLLATE
zestaw do en_AU.utf8
(domyślnie w moim systemie), widać, że zawiera małe i wielkie litery razem:
pax> case A in [a-b]) echo TRUE;; esac
TRUE
pax> _
ale jeśli pozbyć specyfikatorem zakresie, działa zgodnie z oczekiwaniami:
pax> case A in [ab]) echo TRUE;; esac
pax> _
to dlatego, że pierwsze środki between a and b inclusive
, które dla tej kolejności zestawiania obejmuje A
. W przypadku tych ostatnich oznacza to tylko zakres, na który sekwencja zestawiania ma wpływ.
Jeśli ustawisz kolejność zestawiania do jednego wielkość liter, to działa zgodnie z oczekiwaniami:
pax> export LC_COLLATE="C"
pax> case A in [a-b]) echo TRUE;; esac
pax>
Jeśli chcesz po prostu zrobić to jako operacja jednorazowa bez wpływu na cokolwiek innego, można zrobić w sub-shell:
(export LC_COLLATE="C" ; case A in [a-b]) echo TRUE;; esac)
'nocaseglob' ma związku:' Jeśli jest ustawiona, bash mecze nazw w sposób uwzględniania wielkości liter podczas wykonywania ekspansja ścieżka (patrz pathName Expansion powyżej) ', choć zachowanie jest nadal dziwny. – Daenyth