Megjelent a ShellCheck 0.9 kiadása, amely egy statikus shell-szkriptek elemző rendszert fejleszt, amely támogatja a hibák azonosítását bash, sh, ksh és dash nyelvek szkripteiben. A projekt kódja Haskell nyelven íródott és GPLv3 licenc alatt terjesztik. Különböző integrált fejlesztői környezetekhez, mint a Vim, Emacs, VSCode, Sublime, Atom, valamint GCC-kompatibilis hibaüzeneteket támogató egyéb környezetekhez biztosítanak összetevőket.

Támogatja a kód szintaktikai hibáinak azonosítását, amelyek a futtatás során hibaüzenetet okoznak, valamint a szemantikai problémákat, amelyek nem zavarják meg a futást, de anomáliákhoz vezethetnek a szkript viselkedésében. Az elemző képes meghatározni a szűk keresztmetszeteket, a nem nyilvánvaló problémákat és a csapdákat, amelyek bizonyos körülmények között hibákat okozhatnak.
A észlelt hibák osztályai között megemlíthetők a speciális karakterek szökésének és idézőjelekbe helyezésének problémái, feltételes kifejezések hibái, a parancsok helytelen használata, az idő- és dátumkezelési problémák, valamint a kezdők tipikus szintaktikai hibái. Például, a "[[ $foo==0 ]]" összehasonlítás során a szóközök hiánya, a "var = 42" szóközök jelenléte, vagy a $ karakter megadása a hozzárendelésnél "$foo=42", a változók idézőjelek nélküli használata "echo $1", valamint a felesleges négyzetes zárójelek megadása a "tr -cd '[a-zA-Z0-9]'" parancsnál.
Továbbá támogatja a kódstílus javítására vonatkozó javaslatok megjelenítését, a hordozhatósági problémák kiküszöbölését és a szkriptek megbízhatóságának növelését. Például a "echo $[1+2]" helyett a "$((..))" szintaxis használatát javasolják, a 'rm -rf "$STEAMROOT/"*' konstrukciót biztonságtalanként jelölik, amely a $STEAMROOT változó ki nem töltésekor a gyökér könyvtárat törölheti, míg a "echo {1..10}" használata a dash és sh-vel való összeegyeztethetetlenségként van kiemelve.
Az új verzióban:
- Figyelmeztetés került hozzáadásra az 'local readonly foo' típusú kifejezésekhez.
- Figyelmeztetés került hozzáadásra a parancsok elérhetetlenségéről.
- Figyelmeztetés került hozzáadásra a visszautalásokkal kapcsolatban a 'declare x=1 y=$x' kifejezésben.
- Figyelmeztetés került hozzáadásra, ha a $? a kimeneti kód visszaadására van használva echo, printf, [ ], [[ ]] és test parancsokban.
- Javaslat került hozzáadásra a ((..))inarray[((idx))]=val eltávolítására.
- Javaslat került hozzáadásra a dupla zárójelek összefűzésére aritmetikai kontextusokban.
- Javaslat került hozzáadásra a kerek zárójelek eltávolítására az a[(x+1)]=val kifejezésből.
Forrás: opennet.ru
