Zdravím.
Učím se trochu programovat v BASH a narazil jsem na otázku, zda dodržovat při programování zpětnou kompatibilitu s dřívějšími verzemi BASH. Ptám se tedy, v jakých případech by se měla zpětná kompatibilita dodržovat a v případě, že jo, tak jak hluboko do historie verzí BASH.
Pokud ti jde v prvé řadě o přenositelnost, pak doporučuji POSIX shell. Např. na MacOSX je bash 3.x, na Linuxu všude většinou 4.x. Např. asocitativní pole jsou podporovány až od 4.x. Další problém může být GNU, BSD nebo komerční svět. Takže GNU obecně podporuje nejvíc nekompatibilních fýčuránek. Takže např napsat sed skript přenositelný mezi Linuxem a MacOSX je oser.
Spousta portabilních scriptů začíná nějakých 100 řádkovým case-esac blokem:
http://standalone.contextgarden.net/setup/first-setup.shTady hlavně kvůli instalaci binárek, ale občas tam jsou i různý nekompatibility na úrovni systémových/POSIX utilitek. Kdysi mě třeba zaskočilo, že Slackware nemá dlouhé přepínače na CLI, napsal jsem pro zákazníka skript, kde jsem použil pro lepší čitelnost dlouhé přepínače z RedHatu a musel jsem to předělávat...
Např. chování a přepínače něčeho tak zásadního jako je echo jsou dost nepřehledné, takže použij spíš printf. Pokud píšeš skripty pro sebe, tak si ušetři práci a na kompatibilitu se vyprdni, pokud je to jen pro Linux a pro tebe.
Spíš se zaměř na čitelnost, nějaké strukturování (functions) a kontrolu návratových kódů a přepínačů a občas si to nech zkritizovat shellcheckem.