Eu tenho um comando que gera alguns parâmetros que desejo passar para outro comando. No entanto, quando executo o comando em um subshell, a saída está sujeita à divisão de palavras , a menos que eu cite tudo, caso em que é uma única palavra.
Quero que a saída do subshell tenha palavras divididas, mas quero que a divisão de palavras respeite as aspas, e isso não acontece. Existe alguma maneira (além de eval
) de dividir a saída do subshell em palavras, mas respeitando as aspas?
Detalhes
Dado o args
comando definido como
#!/bin/sh -
printf "%d args:" "$#"
printf " <%s>" "$@"
echo
eu posso correr
$ args 'foo bar' 'one two'
2 args: <foo bar> <one two>
mas não consigo encontrar uma maneira de fazer um subshell passar 2 argumentos assim.
$ echo "\"'foo bar'\" 'one two'"
"'foo bar'" 'one two'
$ args $(echo "\"'foo bar'\" 'one two'")
4 args: <"'foo> <bar'"> <'one> <two'>
$ args "$(echo "\"'foo bar'\" 'one two'")"
1 args: <"'foo bar'" 'one two'>
Claro, posso usareval
$ eval args $(echo "'foo bar' 'one two'")
2 args: <foo bar> <one two>
mas eval
é perigoso e apresenta todos os tipos de outras possibilidades assustadoras para as coisas darem errado. Não quero que a expansão de parâmetros ou globbing aconteça novamente, etc. Só quero que a divisão de palavras respeite as aspas. Não há realmente nenhuma maneira de fazer isso em bash
?