Se a string já estiver armazenada em uma variável, você pode usar a expansão de parâmetro de bash , especificamente ${parameter,,pattern} (disponível desde bash 4.0), em que parameter é o nome de sua variável e pattern é omitido :
$ string="Hello, World!"
$ echo $string
Hello, World!
$ echo ${string,,}
hello, world!
Observe que isso não altera o valor da variável, apenas a saída. Para mudar a variável você tem que atribuir o novo valor:
$ echo $string
Hello, World!
$ string=${string,,}
$ echo $string
hello, world!
A conversão de letras maiúsculas funciona com ${parameter^^pattern} :
$ echo ${string^^}
HELLO, WORLD!
Isso também funciona com strings Unicode (pelo menos com as versões atuais do bash, provavelmente precisa pelo menos do bash 4.3):
$ string='ἈΛΦΆβητος'
$ echo ${string,,}
ἀλφάβητος
$ echo ${string^^}
ἈΛΦΆΒΗΤΟΣ
Se você estiver usando zsh , você pode usar Flags de Expansão de Parâmetros ( ${(FLAGS)NAME} ; disponível desde o zsh 2.5) para obter os mesmos resultados. A sintaxe bash não funciona em zsh 1) . O sinalizador para letras minúsculas é L ; para letras maiúsculas, é U :
$ string="Hello, World!"
$ echo ${(L)string}
hello, world!
$ echo ${(U)string}
HELLO, WORLD!
$ echo $string
Hello, World!"
Isso também funciona com strings Unicode (pelo menos desde o zsh 5.0; eu não tentei com versões anteriores):
$ string='ἈΛΦΆβητος'
$ echo ${(L)string}
ἀλφάβητος
$ echo ${(U)string}
ἈΛΦΆΒΗΤΟΣ
1) Embora, vendo que zsh tinha isso por muito mais tempo, provavelmente deveria ser: "a sintaxe zsh não funciona em bash .
