Utgivelsen av ShellCheck 0.9-prosjektet har blitt publisert, og utvikler et system for statisk analyse av shell-skript som støtter identifisering av feil i skript som tar hensyn til funksjonene bash, sh, ksh og dash. Prosjektkoden er skrevet i Haskell og distribuert under GPLv3-lisensen. Komponenter leveres for integrasjon med Vim, Emacs, VSCode, Sublime, Atom og ulike rammeverk som støtter GCC-kompatibel feilrapportering.

Den støtter identifisering av både syntaksfeil i koden, som fører til at tolken viser en feil ved utføringstidspunktet, og semantiske problemer, på grunn av hvilke utføringen ikke blir forstyrret, men det oppstår anomalier i skriptets oppførsel. Analysatoren kan også identifisere flaskehalser, ikke-opplagte problemer og fallgruver som kan føre til feil under visse omstendigheter.
Blant klassene med oppdagede feil kan vi notere problemer med å unnslippe spesialtegn og ramme dem inn i anførselstegn, feil i betingede uttrykk, feil bruk av kommandoer, problemer med å behandle tid og datoer, og typiske syntaksfeil for nybegynnere. For eksempel fraværet av mellomrom når du sammenligner "[[ $foo==0 ]]", tilstedeværelsen av mellomrom "var = 42" eller indikasjonen av $-symbolet når du tilordner "$foo=42", bruken av variabler uten anførselstegn "ekko $1", indikasjonen av ekstra firkantede parenteser i "tr -cd '[a-zA-Z0-9]'",
I tillegg støtter den produksjonen av anbefalinger for å forbedre kodestilen, eliminere portabilitetsproblemer og øke påliteligheten til skript. For eksempel, i stedet for "ekko $[1+2]" vil det bli foreslått å bruke syntaksen "$((..))", konstruksjonen 'rm -rf "$STEAMROOT/"*' vil bli merket som usikker og i stand til å slette rotkatalogen hvis variabelen ikke er fylt $STEAMROOT, og bruken av "echo {1..10}" vil bli uthevet som inkompatibel med bindestrek og sh.
I den nye versjonen:
- Lagt til advarsel for uttrykk som "lokal skrivebeskyttet foo".
- Lagt til advarsel om utilgjengelige kommandoer.
- Lagt til advarsel om tilbakekoblinger for å 'erklære x=1 y=$x'.
- Lagt til advarsel hvis $? brukes til å skrive ut returkoden for ekko, printf, [ ], [[ ]] og test.
- Lagt til anbefaling for å fjerne ((..))inarray[((idx))]=val.
- Lagt til en anbefaling for sammenkobling av doble parenteser i aritmetiske sammenhenger.
- Lagt til en anbefaling om å fjerne parenteser i uttrykket a[(x+1)]=val.
Kilde: opennet.ru
