Resposta curta: consulte BashFAQ # 50 ("Estou tentando colocar um comando em uma variável, mas os casos complexos sempre falham!").
Resposta longa: Colocar comandos (ou partes de comandos) em variáveis e depois recuperá-los intactos é complicado. Quando o shell expande uma variável na linha de comando, se a variável estiver entre aspas duplas, ela não é analisada; se não estava entre aspas, os espaços são analisados como quebras de argumento, mas as aspas e escape não são analisados. Em qualquer um dos casos, colocar aspas no valor da variável não é útil.
Geralmente, a melhor maneira de fazer esse tipo de coisa é usar uma matriz em vez de uma variável de texto simples:
echonão está mostrando o que você pensa que é. Tente printargs() { printf "'%s' " "$@"; echo; }; printargs $FLAGS; printargs "$FLAGS"ver por que nenhuma dessas opções funciona.
Respostas:
Resposta curta: consulte BashFAQ # 50 ("Estou tentando colocar um comando em uma variável, mas os casos complexos sempre falham!").
Resposta longa: Colocar comandos (ou partes de comandos) em variáveis e depois recuperá-los intactos é complicado. Quando o shell expande uma variável na linha de comando, se a variável estiver entre aspas duplas, ela não é analisada; se não estava entre aspas, os espaços são analisados como quebras de argumento, mas as aspas e escape não são analisados. Em qualquer um dos casos, colocar aspas no valor da variável não é útil.
Geralmente, a melhor maneira de fazer esse tipo de coisa é usar uma matriz em vez de uma variável de texto simples:
fonte
eval é outra opção:
Veja também:
fonte
Eu não vejo o problema :
Talvez você precise citar novamente o valor:
fonte
echo
não está mostrando o que você pensa que é. Tenteprintargs() { printf "'%s' " "$@"; echo; }; printargs $FLAGS; printargs "$FLAGS"
ver por que nenhuma dessas opções funciona.