W większości przypadków polecenie sub stytucja (albo poprzez backticks lub $(), jak inni podkreślili) jest w porządku, ale strzeż się reguł ekspansji powłoki . W szczególności, należy pamiętać, że niecałkowitość jest wykonywana przed i podział słów jest wykonywany po zamianie polecenia.
To nie jest tak źle, jeśli wszystkie argumenty są słowa, ale jeśli rozpocząć wprowadzanie spacji ani innych znaków specjalnych, które normalnie muszą być podane do swoich argumentów, wówczas można spotkać z dziwnych wyników (zauważyć nieprawidłowe rozstaw i cytaty w wyjście):
$ echo "foo 'bar baz'" >a
$ echo $(cat a)
foo 'bar baz'
Cytowanie cały subtitution polecenia nie jest rozwiązaniem, oczywiście, jak to zapobiec słowo podział (stąd zawartość Twojego całego plik byłby pojawiają się jako jeden długi argumentu zamiast z wielu ) i nie zrobi nic z cytatami.
$ echo "$(cat a)"
foo 'bar baz'
Jedno rozwiązanie wokół to jest użycie polecenie wbudowane eval:
$ eval echo "$(cat a)"
foo bar baz
N.B .: echo nie może być najlepszym przykładem polecenia tutaj; możesz chcieć zamienić go na coś innego, np.następujące funkcje:
$ f() { echo $#; }
'gcc $ (cat nazwa_pliku.txt) '- Może potrzebować ofert. –