sh -c: erro de string entre aspas não terminado [duplicado]

2

Passei horas tentando entender o seguinte erro.

Meu script

CMD="sh -c 'echo \"a\"'"
$CMD

Erro:

"a"': 1: "a"': Syntax error: Unterminated quoted string

claro, quando eu faço echo $CMD e cole o resultado, ele funciona como esperado ...

Qual é a causa do erro?

Editar:

Eu estou pedindo uma explicação não apenas uma solução alternativa. Portanto, acho que o link a seguir não responde à minha pergunta: A citação em uma função resulta em erro

    
por klarezz 13.03.2015 / 20:05

2 respostas

3

Isso não funciona. Quando seu shell executa a divisão de palavras, você terá quatro argumentos:

sh
-c
'echo
"a"'

Para conseguir isso, você deve usar uma matriz bash:

cmd=( sh -c 'echo "a"' )
"${cmd[@]}"
    
por 13.03.2015 / 20:18
0

O principal erro aqui é pensar que as aspas simples em torno de 'echo \"a\"' parariam de "divisão de palavras" executada pelo shell e passariam echo "a" como um único argumento para sh.

Nesse caso, as aspas simples são realmente tratadas como "literal" e não "sintáticas" porque estão incluídas nas aspas duplas externas!

O link a seguir me ajudou mais: link

    
por 13.03.2015 / 23:18