Veo que en Bash> 4.0 la expansión de variables se usa para poner una variable en minúscula. Por ejemplo
echo ${variable,,}
Leyendo la página de manual realmente no entiendo por qué el shell está convirtiendo la cadena a minúsculas.
Una expresión de secuencia toma la forma {x..y [.. incr]}, donde xey son enteros o caracteres individuales, e incr, un incremento opcional, es un número entero. Cuando se proporcionan números enteros, la expresión se expande a cada número entre xey, inclusive. Los números enteros suministrados pueden tener el prefijo «0» para forzar que cada término tenga el mismo ancho. Cuando x o y comienzan con un cero, el shell intenta forzar que todos los términos generados contengan el mismo número de dígitos, rellenando con ceros cuando sea necesario. Cuando se proporcionan caracteres, la expresión se expande a cada carácter lexicográficamente entre x y y, inclusive, utilizando la configuración regional predeterminada de C. Tenga en cuenta que tanto x como y deben ser del mismo tipo. Cuando se proporciona el incremento, se utiliza como la diferencia entre cada término. El incremento predeterminado es 1 o r -1 según corresponda.
¿Por qué la variable se convierte a minúsculas?
Respuesta
Estás leyendo la sección incorrecta de la documentación; en su lugar, observe la expansión del parámetro de shell .
${parameter^pattern}
${parameter^^pattern}
${parameter,pattern}
${parameter,,pattern}
Esta expansión modifica el caso de los caracteres alfabéticos en
parameter
. Elpattern
se expande para producir un patrón como en la expansión de nombre de archivo. Cada carácter en el valor expandido deparameter
se prueba conpattern
y, si coincide con el patrón, se convierte su caso. El patrón no debe intentar coincidir con más de un carácter. El operador «^» convierte el patrón de coincidencia de letras minúsculas en mayúsculas; el operador «,» convierte las letras mayúsculas coincidentes en minúsculas. Las expansiones «^^» y «,,» convierten cada carácter coincidente en el valor expandido; las expansiones «^» y «,» coinciden y convierten solo el primer carácter del valor expandido. Si se omitepattern
, se trata como un «?», Que coincide con todos los caracteres. Siparameter
es ‘@’ o ‘*’, la operación de modificación del caso se aplica a cada parámetro posicional por turno, y la expansión es la lista resultante. Siparameter
es una variable de matriz subindicada con @ o *, la operación de modificación de caso se aplica a cada miembro de la matriz a su vez, y la expansión es la lista resultante.
Respuesta
Estás citando la parte de «Expansión de llaves», Una «expansión de llaves» no comienza con $
.
Debe ejecutar este comando:
LESS=+/"\{parameter\^pattern\}" man bash
Para encontrar la parte de «modificación de caso» que comienza con $
(${ ^^ }
).