Bash (Bourne Again Shell) vyšel poprvé v roce 1989 jako náhrada Bourne shellu v projektu GNU. Jedná se o implementaci shellu podle standardu IEEE POSIX, která umožňuje interaktivní provádění příkazů, psaní skriptů a řízení úloh (jobs). Po deseti letech (!) od vydání předchozí major verze bylo oznámeno vydání Bash 5.0.
Nová verze opravuje chyby z předchozího vydání Bash 4.4. Podařilo se nalézt problémy se správou paměti nebo odstranit problémy s expanzí $@ a $* v některých kontextech. Bash by měl být také v lepším souladu s normou POSIX v některých okrajových případech.
Novinka také přidává celou řadu nových vlastností. Kompletní seznam změn naleznete v opravdu hodně dlouhém seznamu, který má celkem téměř deset tisíc řádek a novinky pro verzi 5.0 z toho zabírají asi 800 řádek. Podíváme se společně na to nejdůležitější, co nová verze přinesla.
Nové proměnné
Proměnná BASH_ARGV0 obsahuje název shellu nebo skriptu, podobně jako $0.
Proměnná EPOCHSECONDS obsahuje počet sekund unixové epochy, takzvaný unixový čas.
Proměnná EPOCHREALTIME obsahuje unixový čas, podobně jako EPOCHSECONDS. Na rozdíl od něj jde ale o údaj udávaný s mikrosekundovou přesností reprezentovaný desetinným číslem.
Proměnné HISTSIZE je nově možné nastavovat výchozí hodnotu už během kompilace.
Nové vlastnosti
Příkaz history dokáže odstraňovat celé skupiny záznamů reprezentované rozsahem. Použijte -d start-end. Rovněž rozumí záporným argumentům, které reprezentují pořadí záznamu od konce.
Součástí zdrojových kódů je soubor config-top.h, ve kterém je možné nově definovat statický obsah proměnné $PATH. Obsahem se pak přepíše obsah proměnné prostředí při startu shellu. To se hodí v restriktivních nasazeních.
Ve stejném konfiguračním souboru je pak možné zapnout volbu, která způsobí automatické odesílání záznamů z historie do syslogu.
Volba globasciiranges je nyní ve výchozím stavu zapnutá, vypnout je možné ji během kompilace. Předchází problémům s nečekaným abecedním pořadím v některých locales.
Nová užitečná volba assoc_expand_once dovoluje jen jednu expanzi prvků asociativního pole, jsou-li použity například uvnitř aritmetického výrazu.
Vestavěný příkaz wait má nyní parametr -f, který umožňuje čekat na ukončení specifikované úlohy nebo procesu.
Nekompatibilní změny
Dejte pozor na to, že některé změny zanášejí nekompatibilitu mezi verzemi 4.4 a 5.0. Bylo například upraveno chování zpracování proměnné nameref, která se tak může v některých případech chovat jinak. Brání například vytváření proměnných s nevalidními jmény.
Při zapnutém debuggovacím režimu shell nastavuje jen proměnné BASH_ARGC a BASH_ARGV. Staré chování lze vynutit volbou, ale předání velkého množství proměnných může vést k výkonnostním problémům.
Podrobnosti o všech změnách naleznete v dokumentaci, která byla také aktualizována. Chet Ramey poznamenává, že se snažil minimalizovat dopady změn, které zavádějí nekompatibilitu.
