J'ai une commande qui produit certains paramètres que je veux transmettre à une autre commande. Cependant, lorsque j'exécute la commande dans un sous-shell, la sortie est sujette à division des mots à moins que je ne cite la totalité du texte, auquel cas il s'agit d'un seul mot.
Je veux que la sortie du sous-shell ait des mots séparés, mais je veux que la séparation des mots respecte les guillemets, et ce n'est pas le cas. Existe-t-il un moyen (autre que eval
) pour que la sortie du sous-shell soit divisée en mots mais en respectant les guillemets ?
Détails
Compte tenu de la args
La commande est définie comme suit
#!/bin/sh -
printf "%d args:" "$#"
printf " <%s>" "$@"
echo
Je peux courir
$ args 'foo bar' 'one two'
2 args: <foo bar> <one two>
mais je ne trouve pas le moyen de faire passer 2 args à un sous-shell comme ça.
$ 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'>
Bien sûr, je peux utiliser eval
$ eval args $(echo "'foo bar' 'one two'")
2 args: <foo bar> <one two>
mais eval
est dangereux et introduit toutes sortes d'autres possibilités effrayantes pour que les choses tournent mal. Je ne veux pas que l'expansion des paramètres ou le globbing se reproduisent, etc. Je veux simplement que le découpage des mots respecte les guillemets. N'y a-t-il vraiment aucun moyen de faire cela dans bash
?