Eu procurei no SO e descobri que, para maiúsculas, uma sequência a seguir funcionaria
str="Some string"
echo ${str^^}
Mas tentei fazer algo semelhante em um argumento de linha de comando, o que me deu o seguinte erro
Tentou
#!/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?
bash
?Respostas:
A sintaxe
str^^
que você está tentando está disponível no Bash 4.0 e acima. Talvez a sua seja uma versão mais antiga (ou você executou o scriptsh
explicitamente):Tente o seguinte:
fonte
tr '[a-z]' [[A-Z]'
.tr '[a-z]' '[A-Z]'
.GNU bash, version 4.3.42(1)-release (x86_64-apple-darwin14.5.0)
e recebo o mesmo erro do OP, portanto, não acho que isso esteja disponível em qualquerbash
versão 4.0 ou superior, como você diz.Resultado:
fonte
/
comotr /a-z/ /A-Z/
antes de meu edit: isso só funciona porque substitui/
por/
mas é inútil: pubs.opengroup.org/onlinepubs/9699919799/utilities/tr.html Existe também o mais obscuro e menos útiltr '[:lower:]' '[:upper:]'
.Cuidado com tr, a menos que AZ seja tudo o que você usa. Para outros locais, mesmo '[: lower:]' '[: upper:]' falha, apenas o toupper e o bash do awk funcionam (v4 +)
fonte
tr '[:lower:]' '[:upper:]'
está trabalhando agora para o seu exemplo no OS X, pelo menos, (também comLC_ALL=sv_SE
)Alternativamente, você pode mudar para ksh ou zsh que tiveram suporte de conversão caso por décadas (muito antes
bash
de${var^^}
adicionadas na versão 4.0), embora com uma sintaxe diferente:(também funciona com
zsh
; observe que em pdksh / mksh, isso funciona apenas para letras ASCII).Com
zsh
, você também pode usar oU
sinalizador de expansão de parâmetro:POSIXAMENTE, você pode usar:
Há também:
Porém, em algumas implementações, incluindo GNU
tr
, isso funciona apenas para caracteres de byte único (em locais UTF-8, apenas em letras ASCII).fonte
Se alguém ainda estiver recebendo erros ao tentar
${str^^}
, tentepython -c
ouperl
é provável que a versão do bash seja menor que 4.Até agora, o bash 4 ou mais está funcionando rapidamente com a solução existente.
Usando
python -c
no bashDa mesma forma, também pode ser usado para capitalizar com:
Usando
perl
fonte