* well, except for the fact that MacOS defaults to zsh now.
* well, except for the fact that MacOS defaults to zsh now.
But Zsh is also POSIX sh compatible, is it not?
Afaik it can be thou
Zsh:
$ A="foo bar baz"; for X in $A; do echo $X; done
foo bar baz
Dash: $ A="foo bar baz"; for X in $A; do echo $X; done
foo
bar
bazor use 'emulate sh' to enable many flags at once.
(and I personally would prefer if other shells would behave like Zsh and not word split unquoted variables by default)
The major factors when it comes to portability are, for all of them, that (a) the POSIX-conformant mode has to be specially invoked, and (b) even if invoked in conformance mode the non-POSIX parts are not always turned off. It's not that the shells won't handle POSIX-conformant scripts. They even mostly will in their (default) non-conformant modes. It's rather that it's difficult to discipline onesself to keep within the bounds of POSIX conformance when writing, even if one tests with conformance mode switched on.
The Debian Almquist and Watanabe shells are the best at preventing non-POSIX stuff creeping in by accident, because the former doesn't have much of it in the first place and the latter actually does things like turn off non-POSIX option arguments and builtins so that they generate errors in conformance mode and one can detect accidental "Yashisms" in testing. With the others, it's easier to accidentally use some of their various extensions and not spot it without explicitly testing with something in addition to the shell in its POSIX-conformant mode.
1. Originally from RTFM -> RTFA -> TFA, so feel free to use your own substitution for F, but in this case it's a fine article.
I think it's more broadly applicable