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[@]}"
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
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[@]}"
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