Como faço para ecoar uma expressão com aspas simples e duplas?

3

Eu tentei muitas coisas, mas sou novo no shell. É possível ter aspas duplas e simples dentro de um echo ?

Eu quero gerar echo "scan 'LPV',{FILTER => "(PrefixFilter ('MP1-Eq1')"}" para a chamada do sistema, mas estou recebendo um erro devido às múltiplas aspas duplas e simples.

ftable="echo" " \"" "scan" " " "'LPV',{FILTER => " "\"" "\(" "PrefixFilter ""\(""'MP1-Eq1'" "\)" "\"" "\}" "\" "    
echo "scan 'LPV',{FILTER => "(PrefixFilter ('MP1-Eq1')"}"
bash: syntax error near unexpected token '('

Como posso escrever scan 'LPV',{FILTER => "(PrefixFilter ('MP1-Eq1')"} ? A sintaxe é hbase e não posso alterá-la ...

EDITAR

Eu quero chamar echo dentro de chamada de sistema .

ftable="echo "scan 'LPV',{FILTER => "(PrefixFilter ('MP1-Eq1')"}" "
system(ftable)
error

Eu tentei com $, mas

ftable="echo $'scan" "\'" "LPV" "\'" ",{FILTER => " "\"" "(PrefixFilter (" "\'" "MP1-Eq1" "\'" ")" "\"" "}' '"
system(ftable)
error

Obtendo um erro por causa de aspas duplas.

    
por Aashu 01.06.2014 / 18:59

2 respostas

5

Em bash :

echo $'scan \'LPV\',{FILTER => "(PrefixFilter (\'MP1-Eq1\')"}'

ou

echo "scan 'LPV',{FILTER => \"(PrefixFilter ('MP1-Eq1')\"}'"

Para strings mais longas, essa pode ser uma alternativa mais conveniente:

> cat <<EOT
scan 'LPV',{FILTER => "(PrefixFilter ('MP1-Eq1')"}
EOT

com EOT ou \EOT , dependendo se a expansão de parâmetro e remoção de aspas (barra invertida) são intencionais ou não.

Uso em awk

A definição dessa string dentro de awk tornaria tudo ainda mais complexo. Isso deve ser feito fora de awk no shell:

ftable=$'echo "scan \'LPV\',{FILTER => "(PrefixFilter (\'MP1-Eq1\')"}"'
# echo "$ftable"
awk -v ftable="$ftable" '... system(ftable); ...'
    
por 01.06.2014 / 19:04
2

Você apenas tem que escapar de aspas duplas dentro das aspas duplas:

$ ftable="echo \"scan 'LPV',{FILTER => \"(PrefixFilter ('MP1-Eq1')\"}\""
$ echo $ftable
echo "scan 'LPV',{FILTER => "(PrefixFilter ('MP1-Eq1')"}"
    
por 01.06.2014 / 19:05