Se você estiver usando bash , a maneira mais fácil de salvar um comando exatamente é colocá-lo em uma matriz. Se o comando que você deseja executar for:
example -options "-i filename"
você pode salvá-lo em uma variável de matriz com:
commandline=(example -options "-i filename")
Em seguida, você pode executar o comando salvo exatamente como está @, expondo a matriz entre aspas duplas:
"${commandline[@]}"
A principal coisa a saber aqui é que o shell trata caracteres de aspas ( "'\ ) de maneira diferente quando digitado diretamente na linha de comando a partir de quando os encontra dentro de uma expansão variável como em seu ${commandstring} . Na linha de comando, os caracteres de citação têm uma função de citação especial. Dentro de uma expansão de parâmetro, eles são apenas caracteres normais não especiais. Portanto, "-i filename" é uma única palavra quando digitado na linha de comando que é analisada como -i filename , mas os mesmos caracteres em uma variável expandem para as palavras "-i e filename" .
BashFAQ 50 aborda este tópico com muito mais detalhes.