Ubuntu – Command to convert an upper-case string to lower-case

bashscripts

What is the Bash command I can use to convert an upper-case string to lower-case and vice-versa?

Thank you.

Best Answer

If the string is already stored in a variable you can use bash's parameter expansion, specifially ${parameter,,pattern} (available since bash 4.0), where parameter is the name of your variable and pattern is ommitted:

$ string="Hello, World!"
$ echo $string
Hello, World!
$ echo ${string,,}
hello, world!

Note that this does not change the value of the variable, only the output. To change the variable you have to assign the new value:

$ echo $string
Hello, World!
$ string=${string,,}
$ echo $string
hello, world!

The upper-case conversion works with ${parameter^^pattern}:

$ echo ${string^^}
HELLO, WORLD!

This works also with Unicode strings (at least with current bash versions, probably needs at least bash 4.3):

$ string='ἈΛΦΆβητος'
$ echo ${string,,}
ἀλφάβητος
$ echo ${string^^}
ἈΛΦΆΒΗΤΟΣ

If you are using zsh, you can use Parameter Expansion Flags (${(FLAGS)NAME}; available since zsh 2.5) to achieve the same results. The bash syntax does not work in zsh 1). The flag for lower case is L; for upper case it is U:

$ string="Hello, World!"
$ echo ${(L)string}
hello, world!
$ echo ${(U)string}
HELLO, WORLD!
$ echo $string
Hello, World!"

This also works with Unicode strings (at least since zsh 5.0; I did not try with earlier versions):

$ string='ἈΛΦΆβητος'
$ echo ${(L)string} 
ἀλφάβητος
$ echo ${(U)string}  
ἈΛΦΆΒΗΤΟΣ



1) Although, seeing that zsh had this for far longer, it should probably be: "the zsh syntax does not work in bash.