Vedo che in Bash> 4.0 lespansione di una variabile viene utilizzata per minuscolo una variabile. Ad esempio
echo ${variable,,}
Leggendo la pagina man non capisco davvero perché la shell sta convertendo la stringa in minuscolo.
Unespressione di sequenza assume la forma {x..y [.. incr]}, dove xey sono numeri interi o singoli caratteri e incr, un incremento opzionale, è un numero intero. Quando vengono forniti numeri interi, lespressione si espande a ogni numero compreso tra x e y, inclusi. I numeri interi forniti possono essere preceduti da “0” per forzare ogni termine ad avere il stessa larghezza. Quando x o y inizia con uno zero, la shell tenta di forzare tutti i termini generati a contenere lo stesso numero di cifre, spaziatura zero dove necessario. Quando i caratteri vengono forniti, lespressione si espande lessicograficamente a ciascun carattere compreso tra x e y, incluso, utilizzando la locale C predefinita. Si noti che sia x che y devono essere dello stesso tipo. Quando viene fornito lincremento, viene utilizzato come differenza tra ciascun termine. Lincremento predefinito è 1 o r -1 come appropriato.
Perché la variabile viene convertita in minuscolo?
Risposta
Stai leggendo la sezione sbagliata della documentazione; guarda invece espansione dei parametri della shell .
${parameter^pattern}
${parameter^^pattern}
${parameter,pattern}
${parameter,,pattern}
Questa espansione modifica il caso dei caratteri alfabetici in
parameter
.pattern
viene espanso per produrre un pattern proprio come nellespansione del nome del file. Ogni carattere nel valore espanso diparameter
viene verificato rispetto apattern
e, se corrisponde al modello, il suo caso viene convertito. Il modello non dovrebbe tentare di abbinare più di un carattere. Loperatore “^” converte le lettere minuscole che corrispondono al modello in maiuscolo; loperatore “,” converte le lettere maiuscole corrispondenti in minuscole. Le espansioni “^^” e “,,” convertono ogni carattere corrispondente nel valore espanso; le espansioni “^” e “,” corrispondono e convertono solo il primo carattere nel valore espanso. Sepattern
viene omesso, viene trattato come un “?”, Che corrisponde a ogni carattere. Separameter
è “@” o “*”, loperazione di modifica del caso viene applicata a turno a ciascun parametro di posizione e lespansione è lelenco risultante. Separameter
è una variabile di matrice contrassegnata da @ o *, loperazione di modifica del caso viene applicata a turno a ciascun membro della matrice e lespansione è lelenco risultante.
Risposta
Stai citando la parte per “Brace Expansion”, Una “espansione con parentesi graffa” non inizia con $
.
Dovresti eseguire questo comando:
LESS=+/"\{parameter\^pattern\}" man bash
Per trovare la parte di “modifica del caso” che inizia con $
(${ ^^ }
).