Die Standard-POSIX-Shell beikann Befehlsersetzung in einer POSIX-Shell nur an Stelle eines Befehlsnamens verwendet werden?
http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_07_04
sagt in Abschnitt 2.6.3:
Command substitution allows the output of a command to be substituted in place of the command name itself
Dies scheint zu bedeuten, dass es nur arbeiten, gewährleistet ist, wenn Sie für den gesamten Befehl ersetzen Name; Wenn Sie einen Teil davon oder etwas anderes ersetzen, kann es funktionieren oder auch nicht.
Experimenting:
$ echo ;
$ $(echo echo) ;
$
So weit so gut ...
$ e$(echo cho) ;
$ echo $(echo ';')
;
$ echo $(echo foobar)
foobar
Das erste und das dritte Beispiel oben zu "arbeiten" erscheinen, aber die zweite "nicht funktioniert". Ist dies alles einfach undokumentiertes und zufälliges Verhalten, wie der Standard zu implizieren scheint, und in Wirklichkeit für irgendeine andere POSIX-Shell, ist keines dieser drei garantiert "zu arbeiten"?
(Mit „Arbeit“, meine ich „das gleiche Ergebnis produzieren, als ob die Ergebnisse der Substitution in der sich auf dem Terminal-Befehl eingegeben wurden“)
Im zweiten und dritten Beispiel ist der Befehl "echo" und das ist _nicht_ das Ergebnis der Befehlsersetzung. Nur die Argumente für den Befehl echo sind das Ergebnis der Befehlsersetzung. Hast du das beabsichtigt? – John1024
Ja; und nach dem Standard funktioniert das nicht garantiert, oder? Mit "Arbeit", ich meine, erzeuge das gleiche Ergebnis, als wäre das Ergebnis der Substitution einfach in den Befehl selbst eingegeben worden. –
Haben Sie vor $ '(echo foobar)' anstelle von 'echo $ (echo foobar)' zu schreiben? – John1024