Es ist doch ganz einfach:
- Benötigt man keine Kompatiblität zu anderen Shells außer der bash, ist es sinnvoll, bash-Skripte zu schreiben, die Features der bash nutzen. Sie machen den Code einfacher, lesbarer, robuster und wartbarer.
- Benötigt man Kompatiblität zu anderen Shells außer der bash, ist es sinnvoll, POSIX-Scripte zu schreiben.
Egal wie man sich entscheidet, auf beiden Seiten gewinnt man etwas und verliert etwas. Eine Entscheidung muß daher IMHO individuell gefällt werden.
Ich persönlich habe zum Beispiel nicht das Problem, daß irgendeines meiner Skripte auch plötzlich unter einem Illumos laufen können muß, wo keine bash installiert ist, ich keine root-Rechte habe (und sie somit auch nicht selber nachinstallieren kann), und der Admin auch keine bash installieren mag.
Aber eigentlich betrifft das Problem alle Programmiersprachen, die sich im Laufe der Jahre weiterentwickeln, C, C++, Java, Perl, Python, ... Welche Version des Standards benutzt man hier?
Im Falle des POSIX-Standards hat man sogar noch ein weiteres Problem: Der POSIX-Standard ist an vielen Stellen schwammig. Selbst wenn man "#!/bin/sh" schreibt und keine Bashisms verwendet, kann es sehr gut sein, daß das Skript in einer anderen Umgebung/Shell nicht wie erwartet funktioniert. Beispiel "echo": Es ist lediglich spezifiziert, daß es Zeichenketten + Zeichenumbruch ausgibt. Verhalten bei Sequenzen mit Backslash am Anfang, wie z.B. "\t"? AFAIK nicht durch POSIX gedeckt, kann so oder so sein. [1] Schalter "-n" vorhanden? AFAIK nicht durch POSIX gedeckt. (Deswegen hier am besten immer printf statt echo verwenden.) Wird bei "xxx | ... <Schleife>" intern eine Subshell gestartet oder nicht, d.h. sind dort gesetzte Variablen auch am Ende der Schleife noch vorhanden? Nach meinem Kenntnisstand läßt POSIX dies offen, d.h. das kann jede Shell so machen wie sie mag. [2] Und so weiter... Bei bash hingegen hat man nur bei anderen Versionen der bash ggf. ein anderes Verhalten, und diese Dinge sind sowohl übersichtlich als auch konkret dokumentiert.
Und dann ist POSIX auch nicht gleich POSIX, auch hier gibt es unterschiedliche Versionen des Standards. Wenn man sich für POSIX entscheidet, welche Version des Standards nimmt man?
[1] Quelle:
http://mywiki.wooledge.org/Bashism
[2] Quelle:
http://mywiki.wooledge.org/BashFAQ/024