9.2. Bash (Bourne-Again Shell)
- Mit Bash-4.0 und höher ist es nun möglich, Prozess-Substitutionskonstrukte unverändert durch Klammererweiterung passieren zu lassen, so dass jede Erweiterung des Inhalts separat angegeben und jede Prozess-Substitution separat eingegeben werden muss.
- Mit Bash-4.0 und aktueller ist es nun möglich, dass SIGCHILD das wait-Builtin unterbricht, so wie es Posix definiert, so dass die SIGCHILD-Trap nicht mehr immer pro Child aufgerufen wird, wenn `wait' verwendet wird, um auf alle Children-Prozesse zu warten.
- Nachdem Bash-4.0 und aktueller nun Posix-Regeln beim Finden des Closing-Delimiter einer $() Befehlssubstitution befolgt, verhält die Shell sich nicht wie frühere Versionen, sondern sammelt mehr Syntax- und Parsing-Fehler, bevor sie eine Sub-Shell zur Evaluierung der Befehlssubstitution ausführt.
- Der programmierbare Code zur Vervollständigung verwendet dasselbe Set Delimiter-Zeichen wie readline beim Aufteilen der Kommandozeile in Words, anstelle von einem Set Meta-Zeichen. Daher sollte die programmierbare Vervollständigung und readline konsistenter sein.
- Wenn das Read-Builtin zeitlich ausläuft, versucht es, jede gelesene Eingabe speziellen Variablen zuzuweisen. Dies führt auch dazu, dass Variablen auf den leeren String
- In Bash-4.0 und aktueller agiert die Shell so, als habe sie den Interrupt erhalten, wenn einer der Befehle in einer Pipeline mit einem SIGINT bei der Ausführung einer Befehlsliste gewaltsam beendet wurde.
- Mit Bash-4.0 und aktueller ändert sich das Verhalten der Option
set -e
, so dass die Shell sich beendet, wenn eine Pipeline fehlschlägt (und nicht nur wenn der letzte Befehl in der scheiternden Pipeline ein einzelner Befehl ist). Dies entspricht nicht dem Posix-Standard. An einer Aktualisierung wird derzeit gearbeitet. Das Bash-4.0-Verhalten versucht, den Konsens zum Zeitpunkt des Releases wiederzugeben. - Mit Bash-4.0 und aktueller wird ein Posix Modus-Bug behoben, der das
. (source)
-Builtin veranlasste, das aktuelle Verzeichnis nach dessen Dateinamenargumenten zu durchsuchen, auch wenn"."
nicht Teil des System-PATH ist. Laut Posix sollte die Shell in diesem Fall in der PWD-Variable nachsehen. - Bash-4.1 verwendet beim Vergleich von Strings das aktuelle Gebietsschema und verwendet dabei Operatoren zum
[[
-Befehl. Dies kann auf das frühere Verhalten zurückgesetzt werden, indem eine dercompatNN
shopt-Optionen gesetzt wird.
Wenn zu den bereits aufgeführten Punkten auch noch das Pattern-Argument zum konditionalen Operator =~ für das Regular-Expression-Matching in Anführungszeichen gesetzt wird, funktioniert das Regular-Expression-Matching ggf. nicht mehr. Dies tritt auf allen Architekturen auf. In Versionen von bash älter als 3.2 wurde der Effekt beim Setzen des Arguments der Regular-Expression in Anführungszeichen zum =~-Operator des [[-Befehls nicht spezifiziert. Der praktische Effekt war, dass das doppelte Setzen von Anführungszeichen beim Pattern-Argument Backslashes erforderte, um spezielle Pattern-Zeichen in Anführungszeichen zu setzen. Dies wirkte sich störend auf die Handhabung von Backslashes bei der in doppelte Anführungszeichen gesetzten Wort-Erweiterung aus und war inkonsistent mit der Art und Weise, wie der == Shell-Pattern Matching-Operator Zeichen in Anführungszeichen behandelte.