Bash 4, expansão e colocação em minúsculas

Vejo que no Bash> 4.0 a expansão de variável é usada para minúsculas em uma variável. Por exemplo

echo ${variable,,} 

Lendo a página do manual Eu realmente não entendo por que o shell está convertendo a string em minúsculas.

Uma expressão de sequência assume a forma {x..y [.. incr]}, em que x e y são ambos inteiros ou caracteres únicos, e incr, um incremento opcional, é um número inteiro. Quando inteiros são fornecidos, a expressão se expande para cada número entre x e y, inclusive. Os inteiros fornecidos podem ser prefixados com 0 para forçar cada termo a ter o mesma largura. Quando x ou y começa com zero, o shell tenta forçar todos os termos gerados para conter o mesmo número de dígitos, preenchimento de zero quando necessário. Quando os caracteres são fornecidos, a expressão se expande para cada caractere lexicograficamente entre xe y, inclusive, usando a localidade padrão C. Observe que xey devem ser do mesmo tipo. Quando o incremento é fornecido, ele é usado como a diferença entre cada termo. O incremento padrão é 1 o r -1 conforme apropriado.

Por que a variável é convertida em minúsculas?

Resposta

Você está lendo a seção errada da documentação; observe a expansão do parâmetro de shell em vez disso.

${parameter^pattern}

${parameter^^pattern}

${parameter,pattern}

${parameter,,pattern}

Esta expansão modifica a caixa dos caracteres alfabéticos em parameter. O pattern é expandido para produzir um padrão, assim como na expansão do nome do arquivo. Cada caractere no valor expandido de parameter é testado em pattern e, se corresponder ao padrão, sua caixa será convertida. O padrão não deve tentar corresponder a mais de um caractere. O operador ‘^’ converte o padrão de correspondência de letras minúsculas em maiúsculas; o operador ‘,’ converte as letras maiúsculas correspondentes em minúsculas. As expansões ‘^^’ e ‘,,’ convertem cada caractere correspondido no valor expandido; as expansões ‘^’ e ‘,’ correspondem e convertem apenas o primeiro caractere no valor expandido. Se pattern for omitido, será tratado como um ‘?’, Que corresponde a todos os caracteres. Se parameter for ‘@’ ou ‘*’, a operação de modificação de caso é aplicada a cada parâmetro posicional por vez, e a expansão é a lista resultante. Se parameter for uma variável de array subscrita com @ ou *, a operação de modificação de caso é aplicada a cada membro do array por sua vez, e a expansão é a lista resultante.

Resposta

Você está citando a parte para “Expansão de colchetes”, Uma “expansão de colchetes” não começa com $.

Você deve executar este comando:

LESS=+/"\{parameter\^pattern\}" man bash 

Para encontrar a parte da “modificação do caso” que começa com um $ (${ ^^ }).

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *