Como eu manipulo caracteres especiais como um colchete em um script bash?

3

Estou tentando obter a saída de alguns programas e atribuí-los a variáveis. Eu estou usando backticks para fazer isso, mas posso mudar para um método diferente, se necessário. O que eu noto é que muitas vezes eu não recebo a saída esperada na variável. Um caso simples é este abaixo. Os exemplos reais que tenho são mais complicados. Seja qual for a saída do programa que estou executando nos backticks, eu quero isso na variável. Isso é possível?

test='echo [asdf]'

Se eu echo $test mostrar apenas um.

    
por test 12.12.2014 / 02:24

2 respostas

5
  1. Não use backticks , use $() .
  2. Use aspas simples em torno de strings literais e dobrar as variáveis , então echo "$test" .
  3. Não use echo , use printf .

Afinal de contas:

    $ test="$(printf '%s' '[asdf]')"
    $ printf "%s\n" "$test"
    [asdf]
    
por 12.12.2014 / 02:31
3

A resposta mais simples é escapar do [ para que não seja tratado como um caractere de padrão especial. (O ] de fechamento é tratado literalmente se não for precedido por um [ sem aspas.)

test=$(echo \[asdf])
    
por 12.12.2014 / 02:46

Tags