O comando shell cmd pode ter espaço em branco e aspas simples e duplas.
Como escapar dessas citações para passar corretamente o comando para um shell POSIX:
>dash -c "
cmd"
A outra questão apontada como dup, pergunta sobre aspas duplas. Uma das respostas provavelmente vai funcionar - dividir o comando e usar citações concatenadas. Por exemplo, se cmd fosse
cd "dir"; ls "foobar"
então nós transformaríamos isso em
>dash -c "cd "dir"; ls """foobar""
Isso é confuso ... não há maneira mais fácil?
Adicionado: parece que ninguém me entende ... Eu só quero um procedimento geral, um algoritmo, que leva em entrada, uma seqüência de caracteres (para ser completamente preciso, feito de caracteres ASCII imprimíveis de 0 a 127 na tabela ASCII) e saídas, a segunda seqüência de caracteres. O requisito é que, se a primeira string for executada assim
POSIX_shell>string1
o resultado é o mesmo que
>POSIX_shell -c string2
Estou mais claro agora, por favor me avise.
Respostas:
1 para resposta № 1Primeiro de tudo, tente evitar coisas bagunçadas como vocêmencionado. Se você precisar, mantenha-o simples, todas as aspas duplas dentro da aspa simples não terão problema. Todas as aspas simples dentro de aspas duplas não devem ser um problema.
#Example:
echo ""These are double quoted""
echo ""These are single quoted""
Terceiro (confuso e evite isso se possível), qualquer cota simples que você queira dentro de uma cota única, deve ser evitada usando várias aspas.
echo """"""These are all single quoted, but messy""""""
Em quarto lugar, uma aspa dupla dentro de uma aspa dupla deve ser escapada usando uma barra invertida
echo ""These are double quoted""