foo() any-command
ist die Bourne-Syntax, die von jeder Bourne-ähnlichen Shell unterstützt wird, aber bash
auch von yash
neueren Versionen posh
(die nur zusammengesetzte Befehle unterstützen). (Die Bourne-Shell- und AT & T-Implementierungen von werden ksh
nur unterstützt, foo() any-command > redirections
wenn any-command
es 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
, yash
und zsh
fü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
, zsh
und die pdksh
Basis - Varianten des Korn - Shell. Übrigens ist es auch die awk
Funktionssyntax.
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
, yash
und 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.