This post was thought provoking, I wonder, is the hidden argument here that the posix spec for a shell is not well specified if there is so much variance between the implementations?
Or is the fundamental issue simply a matter of history? Both?
This post was thought provoking, I wonder, is the hidden argument here that the posix spec for a shell is not well specified if there is so much variance between the implementations?
Or is the fundamental issue simply a matter of history? Both?
My main point is that following the spec doesn't guarantee shell scripts will be portable, which is a common misconception.
That feels like a failure in the spec. Your example illustrates it: echo has unspecified behavior that literally prevents it from being portable.
Is it possible portability is just not a feature of posix?
I started to build something here 12 years ago: https://github.com/Mosai/workshop. Then here 2 years ago: https://github.com/alganet/coral
Now I'm attacking it from another angle, trying to document what I learned methodically and share the tools I made for me with everyone else.
POSIX doesn't guarantee portability. POSIX only guarantees that the things it specifies will work in a POSIX-compliant environment. POSIX makes no guarantees about portability to non-POSIX-compliant environments like Windows' shells or MSVC, the Fish shell, etc. POSIX makes no guarantees about the things it doesn't specify.
This mode is not set when called as #!/bin/bash but is enabled for #!/bin/sh
The full list of legacy behaviors that are altered in POSIX mode are in a URL at the bottom of the bash manual page:
https://tiswww.case.edu/php/chet/bash/POSIX
Ksh doesn't do this.