Bolestná verzia projektu ShellCheck 0.9, ktorý sa zaoberá systémom statickej analýzy shell skriptov, podporujúcim identifikáciu chýb v skriptoch s ohľadom na špecifiká bash, sh, ksh a dash. Kód projektu je napísaný v jazyku Haskell a je distribuovaný pod licenciou GPLv3. Poskytujú sa komponenty na integráciu s Vim, Emacs, VSCode, Sublime, Atom a rôznymi integrovanými prostrediami, ktoré podporujú GCC-kompatibilný výstup informácií o chybách.

Podporuje sa identifikácia v kóde, ako syntaktických chýb, ktoré vedú k vyhodeniu chyby interpreterom v čase vykonávania, tak aj sémantických problémov, pri ktorých nedochádza k porušeniu vykonávania, ale vznikajú anomálie v správaní skriptu. Analizátor tiež dokáže určiť úzke miesta, nejasné problémy a pasce, ktoré môžu viesť k zlyhaniu za určitých okolností.
Z tried identifikovaných chýb môžeme spomenúť problémy s escapovaním špeciálnych znakov a uzatváraním do úvodzoviek, chyby v podmienkových výrazoch, nesprávne používanie príkazov, problémy s oblasťami a dátumami, a typické syntaktické chyby začiatočníkov. Napríklad, absencia medzier pri porovnávaní "[[ $foo==0 ]]", prítomnosť medzier "var = 42" alebo uvedenie symbolu $ pri priradení "$foo=42", použitie premenných bez úvodzoviek "echo $1", uvedenie zbytočných hranatých zátvoriek v "tr -cd '[a-zA-Z0-9]'".
Navyše sa podporuje výstup odporúčaní na zlepšenie štýlu kódu, odstránenie problémov s prenositeľnosťou a zvýšenie spoľahlivosti fungovania skriptov. Napríklad, namiesto "echo $[1+2]" sa navrhne použiť syntax "$(..)", konštrukcia 'rm -rf "$STEAMROOT/"*' bude označená ako nebezpečná a schopná odstrániť koreňový adresár pri nezaplnenej premennej $STEAMROOT, a použitie "echo {1..10}" bude vyzdvihnuté ako nekompatibilné s dash a sh.
V novej verzii:
- Pridané varovanie pre výrazy typu 'local readonly foo'.
- Pridané varovanie o nedostupnosti príkazov.
- Pridané varovanie o spätných odkazoch v 'declare x=1 y=$x'.
- Pridané varovanie, ak sa $? používa na vydanie kódu návratu echo, printf, [ ], [[ ]] a test.
- Pridané odporúčanie na odstránenie ((..))inarray[((idx))]=val.
- Pridané odporúčanie na zlúčenie dvojitých zátvoriek v aritmetických kontextoch.
- Pridané odporúčanie na odstránenie okrúhlych zátvoriek v výraze a[(x+1)]=val.
Zdroj: opennet.ru
