La plupart du temps, commande sub stitution (soit par des guillemets ou $(), comme d'autres l'ont souligné) est bien, mais méfiez-vous de shell règles d'expansion. Surtout, gardez à l'esprit que le désarmement est fait avant et que la division des mots est terminée après substitution de commande.
Ce n'est pas trop mal si tous vos arguments sont des mots, mais si vous commencer à mettre des espaces ou d'autres caractères spéciaux qui doivent normalement être cité dans vos arguments, alors vous pouvez rencontrer avec des résultats étranges (notez l'anormal espacement et citations dans la sortie):
$ echo "foo 'bar baz'" >a
$ echo $(cat a)
foo 'bar baz'
Citant toute commande subtitution est pas une solution, évidemment, car il empêcherait le fractionnement mot (par conséquent, l'ensemble de votre contenu de fichier apparaît comme une longue discussion au lieu de nombreux options), et ne ferait rien au sujet des citations.
$ echo "$(cat a)"
foo 'bar baz'
Une solution autour est d'utiliser le eval builtin:
$ eval echo "$(cat a)"
foo bar baz
l'écho de ne pas être N.B. la meilleure commande exemple ici; vous pourriez vouloir le remplacer par autre chose, par exemple .la fonction suivante:
$ f() { echo $#; }
gcc $ (cat filename.txt) '- Peut-être besoin de citations. –