A sintaxe str^^
que você está tentando está disponível no Bash 4.0 e acima. Talvez o seu seja uma versão mais antiga:
Tente isto:
str="Some string"
echo $str | awk '{print toupper($0)}'
Eu procurei o SO e descobri que, para maiúsculas, uma sequência de caracteres funcionaria
str="Some string"
echo ${str^^}
Mas eu tentei fazer algo semelhante em um argumento de linha de comando, o que me deu o seguinte erro
#!/bin/bash
## Output
echo ${1^^} ## line 3: ${1^^}: bad substitution
echo {$1^^} ## No error, but output was still smaller case i.e. no effect
Como poderíamos fazer isso?
echo "lowercase" | tr a-z A-Z
Saída:
LOWERCASE
Tenha cuidado com o tr, a menos que A-Z seja tudo o que você usa. Para outras localidades, mesmo '[: lower:]' '[: upper:]' falha, somente o toupper do awk e o bash (v4 +) funciona
$ str="abcåäö"
$ echo "$str"|tr '/a-z/' '/A-Z/'
ABCåäö
$ echo "$str"|LC_ALL=sv_SE tr '[:lower:]' '[:upper:]'
ABCåäö
$ echo "$str"|awk '{print toupper($0)}'
ABCÅÄÖ
$ echo ${str^^} # Bash 4.0 and later
ABCÅÄÖ
$ STR="ABCÅÄÖ"
$ echo ${STR,,}
abcåäö
Tags bash string case-sensitivity