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
.