Caracteres especiais no valor da variável escapam

1

Digamos que eu declare a variável var como var="ls | grep a" . Então eu esperaria que o comando $var funcionasse exatamente como ls | grep a , mas em vez disso, o | char é lido como escape \| , de modo que ele imprime um erro dizendo que nenhum arquivo chamado \| , grep ou a é encontrado.

Minha pergunta é: como posso fazer o Bash interpretar o valor | in var como não tendo escapado?

Eu tenho que usá-lo em uma declaração case como

var1="str1|str2"
var2="str3|str4"
case $option in
  ${var1} ) echo "It works! 1" ;;
  ${var2} ) echo "It works! 2" ;;
  *  ) echo "It does not work"
esac

(edit2): e retorne It works! 1 se $option for str1 ou str2 e It works! 2 se $option for str3 ou% código%. Isso porque estou escrevendo uma função em que os padrões de caso podem mudar de acordo com as entradas do usuário.

Embora eu não ache relevante saber, uso str4 no Lubuntu 12.04 e lxterminal é $BASH_VERSION .

Qualquer ajuda é apreciada, obrigado!

    
por AndreasT 05.10.2013 / 19:35

1 resposta

1

Se eu entendi sua pergunta, isso pode ser o que você deseja:

#!/bin/bash

var="a|b"
first_option=$(echo $var | cut -d"|" -f1)
second_option=$(echo $var | cut -d"|" -f2)

is_working? () {
  case  in 
    $first_option ) echo "It works!" ;;
    $second_option ) echo "It also works!" ;;
    *  ) echo "It does not work"
  esac
}

#1
option=a
is_working? $option

#2
option=b
is_working? $option

#2
option=c
is_working? $option
    
por Radu Rădeanu 05.10.2013 / 20:51