Estou sempre comparando o Bash ao Python para tarefas diárias de script. O Bash é profundamente bonito de várias maneiras, mas a biblioteca Python é incrível. O Bash deveria ter integrado isso desde o primeiro dia.
toupper() {
local char="$*"
out=$(echo $char | tr [:lower:] [:upper:])
local retval=$?
echo "$out"
unset out
unset char
return $retval
}
A situação melhora após 3.2.25 via expansão de parâmetro :
var="hello world"; echo ${var^^} # toupper()
var="hello world"; echo ${var,,} # tolower()