Udgaven af projektet ShellCheck 0.9, der udvikler et system til statisk analyse af shell-scripts, der understøtter identifikation af fejl i scripts med hensyn til bash, sh, ksh og dash. Koden til projektet er skrevet i Haskell og distribueres under GPLv3-licensen. Der leveres komponenter til integration med Vim, Emacs, VSCode, Sublime, Atom og forskellige integrerede miljøer, der understøtter GCC-kompatibel fejluddata.

Der understøttes identifikation af både syntaktiske fejl i koden, der fører til, at fortolkeren giver en fejl under kørslen, samt semantiske problemer, som ikke forstyrrer udførelsen, men som medfører anomalier i scriptets adfærd. Analysten kan også identificere flaskehalse, uklarheder og faldgruber, der kan føre til nedbrud under bestemte omstændigheder.
Af de klasser af identificerede fejl kan nævnes problemer med escape af specialtegn og indramning i citationer, fejl i betingede udtryk, forkert brug af kommandoer, problemer med tids- og databehandling samt typiske syntaktiske fejl lavet af begyndere. For eksempel manglende mellemrum ved sammenligning "[[ $foo==0 ]]", tilstedeværelse af mellemrum "var = 42" eller angivelse af symbolet $ ved tildeling "$foo=42", brug af variabler uden citationer "echo $1", angivelse af unødvendige firkantede parenteser i "tr -cd '[a-zA-Z0-9]'".
Yderligere understøttes der anbefalinger til forbedring af kodekvalitet, løsning af bærbarhedsproblemer og øgning af scripts pålidelighed. For eksempel vil "echo $[1+2]" blive anbefalet at bruge syntaksen "$((..))", og konstruktionen 'rm -rf "$STEAMROOT/"*' vil blive markeret som usikker og potentielt kunne slette rodkataloget, hvis variablen $STEAMROOT ikke er udfyldt, mens brugen af "echo {1..10}" vil blive fremhævet som inkompatibel med dash og sh.
I den nye version:
- En advarsel er tilføjet for udtryk som 'local readonly foo'.
- En advarsel er tilføjet om utilgængelige kommandoer.
- En advarsel er tilføjet for tilbagekaldelser i 'declare x=1 y=$x'.
- En advarsel er tilføjet, hvis $? bruges til at returnere exit-kode for echo, printf, [ ], [[ ]] og test.
- En anbefaling er tilføjet om at fjerne ((..))inarray[((idx))]=val.
- En anbefaling er tilføjet om at kombinere dobbeltparenteser i aritmetiske kontekster.
- En anbefaling er tilføjet om at fjerne runde parenteser i udtrykket a[(x+1)]=val.
Kilde: opennet.ru
