Argumento de linha de comando de script Bash para maiúscula

5

Se eu puder fazer isso no meu bash shell:

$ STRING="A String"
$ echo ${STRING^^}
A STRING

Como posso alterar meu argumento de linha de comando para maiúsculas?

Eu tentei:

GUARD=${1^^}

Esta linha produz um erro Bad substitution para essa linha.

    
por user1135541 13.04.2015 / 22:40

3 respostas

8

Vamos começar com este script de teste:

$ cat script.sh 
GUARD=${1^^}
echo $GUARD

Isso funciona:

$ bash script.sh abc
ABC

Isso não funciona:

$ sh script.sh abc
script.sh: 1: script.sh: Bad substitution

Isso porque, no meu sistema, como a maioria dos sistemas parecidos com o debian, o shell padrão, /bin/sh , não é bash. Para obter recursos bash, é necessário invocar explicitamente o bash.

O shell padrão em sistemas do tipo debian é dash . Foi escolhido não por causa de recursos, mas por causa da velocidade. Não suporta ^^ . Para ver o que suporta, leia man dash .

    
por 13.04.2015 / 22:45
3

Com o comando tr :

Script:

#!/bin/bash

echo $@ | tr '[a-z]' '[A-Z]'

Verifique:

$ bash myscript.sh abc 123 abc
ABC 123 ABC
    
por 16.04.2015 / 05:22
0

typeset -u VAR=VALUE também funciona

    
por 16.04.2015 / 03:44