Utgitt versjon 0.9 av prosjektet ShellCheck, som utvikler et statisk analyseverktøy for shell-skript og støtter gjenkjenning av feil i skriptene med hensyn til spesifikasjonene for bash, sh, ksh og dash. Prosjektkoden er skrevet i Haskell og distribueres under GPLv3-lisensen. Komponenter for integrasjon med Vim, Emacs, VSCode, Sublime, Atom og ulike integrerte utviklingsmiljøer som støtter GCC-kompatibel feilmeldingsutgang tilbys.

Det støttes identifikasjon av både syntaksfeil i koden som fører til at tolkeren gir ut feilmeldinger ved kjøring, samt semantiske problemer som ikke forstyrrer kjøringen, men skaper avvik i skriptets oppførsel. Analyseverktøyet kan også identifisere flaskehalser, skjulte problemer og fallgruver som kan føre til oppbrudd under visse omstendigheter.
Blant klassene av identifiserte feil kan vi merke oss problemer med escaping av spesialtegn og innramming i anførselstegn, feil i betingede uttrykk, feilaktig bruk av kommandoer, problemer med tid- og databehandling, og typiske syntaksfeil blant nybegynnere. For eksempel, mangel på mellomrom ved sammenligning '[[$foo==0]]', tilstedeværelsen av mellomrom 'var = 42', eller angivelse av '$' ved tildeling '$foo=42', bruk av variabler uten anførselstegn 'echo $1', angivelse av unødvendige firkantede parenteser i 'tr -cd '[a-zA-Z0-9]'.
I tillegg støttes utdata med anbefalinger for å forbedre kode-stilen, løse portabilitetsproblemer og øke påliteligheten til skriptene. For eksempel, i stedet for 'echo $[1+2]' vil det bli foreslått å bruke syntaksen '$((..))', konstruksjonen 'rm -rf "$STEAMROOT/"*' vil bli merket som usikker og potensielt kunne slette rotkatalogen dersom variabelen $STEAMROOT ikke er utfylt, og bruken av 'echo {1..10}' vil bli fremhevet som inkompatibel med dash og sh.
I den nye versjonen:
- Advarsel for uttrykk som 'local readonly foo' er lagt til.
- Advarsel om utilgjengelighet av kommandoer er lagt til.
- Advarsel om tilbakekoblinger i 'declare x=1 y=$x' er lagt til.
- Advarsel hvis $? brukes for å returnere koden fra echo, printf, [ ], [[ ]] og test.
- Anbefaling om å fjerne ((..))inarray[((idx))]=val er lagt til.
- Anbefaling om å kombinere doble parenteser i aritmetiske sammenhenger er lagt til.
- Anbefaling om å fjerne runde parenteser i uttrykket a[(x+1)]=val er lagt til.
Kilde: opennet.ru
