Bash 4, expansión y poner en minúsculas

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. El pattern se expande para producir un patrón como en la expansión de nombre de archivo. Cada carácter en el valor expandido de parameter se prueba con pattern 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 omite pattern, se trata como un «?», Que coincide con todos los caracteres. Si parameter 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. Si parameter 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 $ (${ ^^ }).

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *