foo() any-command
ist die Bourne-Syntax, die von jeder Bourne-ähnlichen Shell unterstützt wird, aber bashauch von yashneueren Versionen posh(die nur zusammengesetzte Befehle unterstützen). (Die Bourne-Shell- und AT & T-Implementierungen von werden kshnur unterstützt, foo() any-command > redirectionswenn any-commandes sich um einen zusammengesetzten Befehl handelt.)
foo() any-compound-command
(Beispiele der Verbindung Befehle: { cmd; }, for i do echo "$i"; done, (cmd)... die am häufigsten verwendet wird { ...; })
ist die POSIX-Syntax, die von jeder Bourne-ähnlichen Shell unterstützt wird und die Sie normalerweise verwenden möchten.
function foo { ...; }
ist die Korn-Shell-Syntax, die der Bourne-Syntax vorausgeht. Verwenden Sie diese Option nur, wenn Sie speziell für die AT & T-Implementierung der Korn-Shell schreiben und die spezifische Behandlung benötigen, die sie dort erhält. Das Syntax ist nicht POSIX, sondern wird unterstützt durch bash, yashund zshfür die Kompatibilität mit dem Korn - Shell obwohl diese Schalen (und die pdksh-basierten Varianten des Korn - Shell) nicht behandeln es anders von der Standard - Syntax.
function foo () { ...; }
ist die Syntax ohne Shell und sollte nicht verwendet werden . Es geschieht nur durch Zufall unterstützt werden bash, yash, zshund die pdkshBasis - Varianten des Korn - Shell. Übrigens ist es auch die awkFunktionssyntax.
Wenn wir die esoterische Liste weiter durchgehen,
function foo() other-compound-command
(wie function foo() (subshell)oder function foo() for i do; ... done) ist noch schlimmer. Es wird unterstützt durch bash, yashund zsh, aber nicht ksh, auch die pdksh-basierten Varianten.
Während:
function foo() simple command
wird nur unterstützt von zsh.
function baz { echo "baz"; }. Siehe Bashism in GreyCats Wiki.