Bash 4, espansione e messa in minuscolo

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 di parameter viene verificato rispetto a pattern 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. Se pattern viene omesso, viene trattato come un “?”, Che corrisponde a ogni carattere. Se parameter è “@” o “*”, loperazione di modifica del caso viene applicata a turno a ciascun parametro di posizione e lespansione è lelenco risultante. Se parameter è 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 $ (${ ^^ }).

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *