Bylo vydáno vydání projektu ShellCheck 0.9, které rozvíjí systém statické analýzy shellových skriptů a podporuje odhalování chyb ve skriptech s ohledem na specifika bash, sh, ksh a dash. Kód projektu je napsán v jazyce Haskell a je šířen pod licencí GPLv3. Jsou poskytovány komponenty pro integraci s Vim, Emacs, VSCode, Sublime, Atom a různými integrovanými prostředími, které podporují GCC-kompatibilní výstup chybových hlášení.

Podporuje se odhalování v kódu jak syntaktických chyb, které vedou k tomu, že interpretr vyhlásí chybu během vykonávání, tak semantických problémů, kdy vykonávání není přerušeno, ale dochází k anomáliím v chování skriptu. Analyzátor také může určit úzká místa, nejasné problémy a skryté pastičky, které mohou vést k selhání za určitých okolností.
Mezi třídami odhalovaných chyb lze zmínit problémy s escapováním speciálních znaků a ohraničováním v uvozovkách, chyby v podmínkových výrazech, nesprávné používání příkazů, problémy s časovými a datovými operacemi a typické syntaktické chyby nováčků. Například, absence mezer při porovnávání „[[ $foo==0 ]]“, existence mezer „var = 42“ nebo uvedení znaku $ při přiřazení „$foo=42“, používání proměnných bez uvozovek „echo $1“, uvedení nadbytečných hranatých závorek v „tr -cd '[a-zA-Z0-9]'“.
Dále se podporuje výstup doporučení pro zlepšení stylu kódu, odstranění problémů s přenositelností a zvýšení spolehlivosti skriptů. Například, místo „echo $[1+2]“ bude navrženo použít syntaxi „$((..))“, konstrukce ‘rm -rf „$STEAMROOT/“*’ bude označena jako nebezpečná a schopná odstranit kořenový adresář, pokud není proměnná $STEAMROOT nastavena, a používání „echo {1..10}“ bude zvýrazněno jako nekompatibilní s dash a sh.
V nové verzi:
- Bylo přidáno varování pro výrazy typu ‘local readonly foo’.
- Bylo přidáno varování o nedostupnosti příkazů.
- Bylo přidáno varování o zpětných odkazech v ‘declare x=1 y=$x’.
- Bylo přidáno varování, pokud se $? používá k vydání návratového kódu echo, printf, [ ], [[ ]] a test.
- Bylo přidáno doporučení pro odstranění ((..))inarray[((idx))]=val.
- Bylo přidáno doporučení pro spojení dvojitých závorek v aritmetických kontextech.
- Byla přidána doporučení na odstranění kulatých závorek ve výrazu a[(x+1)]=val.
Zdroj: opennet.ru
