Ha a che fare con le impostazioni locali. Nello specifico, la sequenza di confronto è quella con insensibilità al caso.
Per esempio, con LC_COLLATE
set per en_AU.utf8
(il default sul mio sistema), si può vedere che include caratteri minuscoli e maiuscoli insieme:
pax> case A in [a-b]) echo TRUE;; esac
TRUE
pax> _
ma, se si sbarazzarsi della gamma specificatore, si funziona come previsto:
pax> case A in [ab]) echo TRUE;; esac
pax> _
Questo perché il primo mezzo between a and b inclusive
che, per quella sequenza di collazione, include A
. Per quest'ultimo significa solo a
e , non un intervallo che sarebbe interessato dalla sequenza di confronto.
Se si imposta la sequenza di confronto ad uno tra maiuscole e minuscole, funziona come ci si aspetta:
pax> export LC_COLLATE="C"
pax> case A in [a-b]) echo TRUE;; esac
pax>
Se si desidera solo per fare questo come operazione una tantum senza modificare qualsiasi altra cosa, si può farlo in un sub-shell:
(export LC_COLLATE="C" ; case A in [a-b]) echo TRUE;; esac)
'nocaseglob' è correlato:' Se impostata, bash corrisponde nomi di file in modo case-insensitive quando si esegue l'espansione del percorso (vedi espansione di percorso sopra) ', anche se il comportamento è ancora dispari. – Daenyth