What is the Bash command I can use to convert an upper-case string to lower-case and vice-versa?
Thank you.
What is the Bash command I can use to convert an upper-case string to lower-case and vice-versa?
Thank you.
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
.