Skip to main content
added 306 characters in body
Source Link
Stéphane Chazelas
  • 586.8k
  • 96
  • 1.1k
  • 1.7k
foo() any-command

is the Bourne syntax supported by any Bourne-like shell but bash, yash and recent versions of posh (which only support compound commands). (the Bourne shell and AT&T implementations of ksh don't support foo() any-command > redirections unless any-command is a compound command though).

foo() any-compound-command

(examples of compound commands: { cmd; }, for i do echo "$i"; done, (cmd)... the most commonly used being { ...; })

is the POSIX syntax supported by any Bourne-like shell and the one you generally want to use.

function foo { ...; }

is the Korn shell syntax, which predates the Bourne syntax. Only use this one if writing specifically for the AT&T implementation of the Korn shell and need the specific treatment it receives there. That syntax is not POSIX, but is supported by bash, yash and zsh for compatibility with the Korn shell though those shells (and the pdksh-based variants of the Korn shell) don't treat it any different from the standard syntax.

function foo () { ...; }

is the syntax of no shell and should not be used. It only happens to be supported by accident by bash, yash, zsh and the pdksh based variants of the Korn shell. Incidentally, it's also the awk function syntax.

If we continue going down the esoteric list,

function foo() other-compound-command

(like function foo() (subshell) or function foo() for i do; ... done) is even worse. It is supported by bash, yash and zsh, but not ksh, even the pdksh-based variants.

While:

function foo() simple command

is only supported by zsh.

foo bar() any-command

Or even:

$function_list() any-command

To define several functions at once is only supported by zsh

function { body; } args
() any-compound-command args

Which are anonymous function invocations, are only supported by zsh as well.

foo() any-command

is the Bourne syntax supported by any Bourne-like shell but bash, yash and recent versions of posh (which only support compound commands). (the Bourne shell and AT&T implementations of ksh don't support foo() any-command > redirections unless any-command is a compound command though).

foo() any-compound-command

(examples of compound commands: { cmd; }, for i do echo "$i"; done, (cmd)... the most commonly used being { ...; })

is the POSIX syntax supported by any Bourne-like shell and the one you generally want to use.

function foo { ...; }

is the Korn shell syntax, which predates the Bourne syntax. Only use this one if writing specifically for the AT&T implementation of the Korn shell and need the specific treatment it receives there. That syntax is not POSIX, but is supported by bash, yash and zsh for compatibility with the Korn shell though those shells (and the pdksh-based variants of the Korn shell) don't treat it any different from the standard syntax.

function foo () { ...; }

is the syntax of no shell and should not be used. It only happens to be supported by accident by bash, yash, zsh and the pdksh based variants of the Korn shell. Incidentally, it's also the awk function syntax.

If we continue going down the esoteric list,

function foo() other-compound-command

(like function foo() (subshell) or function foo() for i do; ... done) is even worse. It is supported by bash, yash and zsh, but not ksh, even the pdksh-based variants.

While:

function foo() simple command

is only supported by zsh.

foo() any-command

is the Bourne syntax supported by any Bourne-like shell but bash, yash and recent versions of posh (which only support compound commands). (the Bourne shell and AT&T implementations of ksh don't support foo() any-command > redirections unless any-command is a compound command though).

foo() any-compound-command

(examples of compound commands: { cmd; }, for i do echo "$i"; done, (cmd)... the most commonly used being { ...; })

is the POSIX syntax supported by any Bourne-like shell and the one you generally want to use.

function foo { ...; }

is the Korn shell syntax, which predates the Bourne syntax. Only use this one if writing specifically for the AT&T implementation of the Korn shell and need the specific treatment it receives there. That syntax is not POSIX, but is supported by bash, yash and zsh for compatibility with the Korn shell though those shells (and the pdksh-based variants of the Korn shell) don't treat it any different from the standard syntax.

function foo () { ...; }

is the syntax of no shell and should not be used. It only happens to be supported by accident by bash, yash, zsh and the pdksh based variants of the Korn shell. Incidentally, it's also the awk function syntax.

If we continue going down the esoteric list,

function foo() other-compound-command

(like function foo() (subshell) or function foo() for i do; ... done) is even worse. It is supported by bash, yash and zsh, but not ksh, even the pdksh-based variants.

While:

function foo() simple command

is only supported by zsh.

foo bar() any-command

Or even:

$function_list() any-command

To define several functions at once is only supported by zsh

function { body; } args
() any-compound-command args

Which are anonymous function invocations, are only supported by zsh as well.

added 163 characters in body
Source Link
Stéphane Chazelas
  • 586.8k
  • 96
  • 1.1k
  • 1.7k
foo() any-command

is the Bourne syntax supported by any Bourne-like shell but bash, yash and recent versions of posh (which only support compound commands). (the Bourne shell and AT&T implementations of ksh don't support foo() any-command > redirections unless any-command is a compound command though).

foo() any-compound-command

(examples of compound commands: { cmd; }, for i do echo "$i"; done, (cmd)... the most commonly used being { ...; })

is the POSIX syntax supported by any Bourne-like shell and the one you generally want to use.

function foo { ...; }

is the Korn shell syntax, which predates the Bourne syntax. Only use this one if writing specifically for the AT&T implementation of the Korn shell and need the specific treatment it receives there. That syntax is not POSIX, but is supported by bash, yash and zsh for compatibility with the Korn shell though those shells (and the pdksh-based variants of the Korn shell) don't treat it any different from the standard syntax.

function foo () { ...; }

is the syntax of no shell and should not be used. It only happens to be supported by accident by bash, yash, zsh and the pdksh based variants of the Korn shell. Incidentally, it's also the awk function syntax.

If we continue going down the esoteric list,

function foo() other-compound-command

(like function foo() (subshell) or function foo() for i do; ... done) is even worse. It is supported by bash, yash and zsh, but not ksh, even the pdksh-based variants.

While:

function foo() simple command

is only supported by zsh.

foo() any-command

is the Bourne syntax supported by any Bourne-like shell but bash, yash and recent versions of posh (which only support compound commands).

foo() any-compound-command

(examples of compound commands: { cmd; }, for i do echo "$i"; done, (cmd)... the most commonly used being { ...; })

is the POSIX syntax supported by any Bourne-like shell and the one you want to use.

function foo { ...; }

is the Korn shell syntax, which predates the Bourne syntax. Only use this one if writing specifically for the AT&T implementation of the Korn shell and need the specific treatment it receives there. That syntax is not POSIX, but is supported by bash, yash and zsh for compatibility with the Korn shell though those shells (and the pdksh-based variants of the Korn shell) don't treat it any different from the standard syntax.

function foo () { ...; }

is the syntax of no shell and should not be used. It only happens to be supported by accident by bash, yash, zsh and the pdksh based variants of the Korn shell. Incidentally, it's also the awk function syntax.

If we continue going down the esoteric list,

function foo() other-compound-command

(like function foo() (subshell) or function foo() for i do; ... done) is even worse. It is supported by bash, yash and zsh, but not ksh, even the pdksh-based variants.

While:

function foo() simple command

is only supported by zsh.

foo() any-command

is the Bourne syntax supported by any Bourne-like shell but bash, yash and recent versions of posh (which only support compound commands). (the Bourne shell and AT&T implementations of ksh don't support foo() any-command > redirections unless any-command is a compound command though).

foo() any-compound-command

(examples of compound commands: { cmd; }, for i do echo "$i"; done, (cmd)... the most commonly used being { ...; })

is the POSIX syntax supported by any Bourne-like shell and the one you generally want to use.

function foo { ...; }

is the Korn shell syntax, which predates the Bourne syntax. Only use this one if writing specifically for the AT&T implementation of the Korn shell and need the specific treatment it receives there. That syntax is not POSIX, but is supported by bash, yash and zsh for compatibility with the Korn shell though those shells (and the pdksh-based variants of the Korn shell) don't treat it any different from the standard syntax.

function foo () { ...; }

is the syntax of no shell and should not be used. It only happens to be supported by accident by bash, yash, zsh and the pdksh based variants of the Korn shell. Incidentally, it's also the awk function syntax.

If we continue going down the esoteric list,

function foo() other-compound-command

(like function foo() (subshell) or function foo() for i do; ... done) is even worse. It is supported by bash, yash and zsh, but not ksh, even the pdksh-based variants.

While:

function foo() simple command

is only supported by zsh.

added 362 characters in body
Source Link
Stéphane Chazelas
  • 586.8k
  • 96
  • 1.1k
  • 1.7k
foo() any-command

is the Bourne syntax supported by any Bourne-like shell but bash, yash and recent versions of posh (which only support compound commands).

foo() any-compound-command

(examples of compound commands: { cmd; }, for i do echo "$i"; done, (cmd)... the most commonly used being { ...; })

is the POSIX syntax supported by any Bourne-like shell and the one you want to use.

function foo { ...; }

is the Korn shell syntax, which predates the Bourne syntax. Only use this one if writing specifically for the AT&T implementation of the Korn shell and need the specific treatment it receives there. That syntax is not POSIX, but is supported by bash, yash and zsh for compatibility with the Korn shell though those shells (and the pdksh-based variants of the Korn shell) don't treat it any different from the standard syntax.

function foo () { ...; }

is the syntax of no shell and should not be used. It only happens to be supported by accident by bash, yash, zsh and the pdksh based variants of the Korn shell. Incidentally, it's also the awk function syntax.

If we continue going down the esoteric list,

function foo() other-compound-command

(like function foo() (subshell) or function foo() for i do; ... done) is even worse. It is supported by bash, yash and zsh, but not ksh, even the pdksh-based variants.

While:

function foo() simple command

is only supported by zsh.

foo() any-command

is the Bourne syntax supported by any Bourne-like shell but bash, yash and recent versions of posh (which only support compound commands).

foo() any-compound-command

(examples of compound commands: { cmd; }, for i do echo "$i"; done, (cmd)... the most commonly used being { ...; })

is the POSIX syntax supported by any Bourne-like shell and the one you want to use.

function foo { ...; }

is the Korn shell syntax, which predates the Bourne syntax. Only use this one if writing specifically for the AT&T implementation of the Korn shell and need the specific treatment it receives there. That syntax is not POSIX, but is supported by bash and zsh for compatibility with the Korn shell though those shells don't treat it any different from the standard syntax.

function foo () { ...; }

is the syntax of no shell and should not be used. It only happens to be supported by accident by bash, zsh and the pdksh based variants of the Korn shell. Incidentally, it's also the awk function syntax.

foo() any-command

is the Bourne syntax supported by any Bourne-like shell but bash, yash and recent versions of posh (which only support compound commands).

foo() any-compound-command

(examples of compound commands: { cmd; }, for i do echo "$i"; done, (cmd)... the most commonly used being { ...; })

is the POSIX syntax supported by any Bourne-like shell and the one you want to use.

function foo { ...; }

is the Korn shell syntax, which predates the Bourne syntax. Only use this one if writing specifically for the AT&T implementation of the Korn shell and need the specific treatment it receives there. That syntax is not POSIX, but is supported by bash, yash and zsh for compatibility with the Korn shell though those shells (and the pdksh-based variants of the Korn shell) don't treat it any different from the standard syntax.

function foo () { ...; }

is the syntax of no shell and should not be used. It only happens to be supported by accident by bash, yash, zsh and the pdksh based variants of the Korn shell. Incidentally, it's also the awk function syntax.

If we continue going down the esoteric list,

function foo() other-compound-command

(like function foo() (subshell) or function foo() for i do; ... done) is even worse. It is supported by bash, yash and zsh, but not ksh, even the pdksh-based variants.

While:

function foo() simple command

is only supported by zsh.

added 62 characters in body
Source Link
Stéphane Chazelas
  • 586.8k
  • 96
  • 1.1k
  • 1.7k
Loading
added 27 characters in body
Source Link
Stéphane Chazelas
  • 586.8k
  • 96
  • 1.1k
  • 1.7k
Loading
disambiguate `yash` as it seems there are several shells by that name
Source Link
Stéphane Chazelas
  • 586.8k
  • 96
  • 1.1k
  • 1.7k
Loading
Source Link
Stéphane Chazelas
  • 586.8k
  • 96
  • 1.1k
  • 1.7k
Loading