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. Opatterné expandido para produzir um padrão, assim como na expansão do nome do arquivo. Cada caractere no valor expandido deparameteré testado empatterne, 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. Sepatternfor omitido, será tratado como um ‘?’, Que corresponde a todos os caracteres. Separameterfor ‘@’ ou ‘*’, a operação de modificação de caso é aplicada a cada parâmetro posicional por vez, e a expansão é a lista resultante. Separameterfor 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 $ (${ ^^ }).