Bash 5.1 provides a straight forward way to do this with the L
parameter transformation:
${var@L}
So for example you can say:
$ v="heLLo"
$ echo "${v@L}"
hello
v="heLLo"
echo "${v@L}"
# hello
You can also do uppercase with U
:
$ v="hello"
$ echo "${v@U}"
HELLO
v="hello"
echo "${v@U}"
# HELLO
And uppercase the first letter with u
:
$ v="hello"
$ echo "${v@u}"
Hello
v="hello"
echo "${v@u}"
# Hello