De release van het ShellCheck-project 0.9 is uitgebracht, dat een systeem voor statische analyse van shell-scripts ontwikkelt, dat ondersteuning biedt voor het opsporen van fouten in scripts met inachtneming van de kenmerken van bash, sh, ksh en dash. De code van het project is geschreven in de programmeertaal Haskell en wordt verspreid onder de GPLv3-licentie. Er worden componenten aangeboden voor integratie met Vim, Emacs, VSCode, Sublime, Atom en verschillende geïntegreerde omgevingen die GCC-compatibele foutmeldingen ondersteunen.

Er wordt ondersteuning geboden voor het opsporen van zowel syntactische fouten in de code die de interpreter veroorzaken om tijdens de uitvoering een fout weer te geven, als semantische problemen waardoor de uitvoering niet verstoord wordt, maar er afwijkingen in het gedrag van het script ontstaan. De analyzer kan ook knelpunten, onduidelijke problemen en valkuilen bepalen die kunnen leiden tot fouten bij bepaalde omstandigheden.
Onder de klassen van gedetecteerde fouten kunnen we problemen met het escapen van speciale karakters en het omhullen met aanhalingstekens, fouten in voorwaardelijke uitspraken, verkeerd gebruik van commando's, tijd- en dataproblemen, en typische syntactische fouten van beginners opmerken. Bijvoorbeeld, het ontbreken van spaties bij de vergelijking '[[ $foo==0 ]]', het hebben van spaties 'var = 42' of het aangeven van het $-symbool bij toewijzing '$foo=42', het gebruik van variabelen zonder aanhalingstekens 'echo $1', en het toevoegen van overtollige vierkante haken in 'tr -cd '[a-zA-Z0-9]'.
Bovendien wordt de output van aanbevelingen ter verbetering van de code-stijl, het verhelpen van probleem met draagbaarheid en het verhogen van de betrouwbaarheid van scripts ondersteund. Bijvoorbeeld, in plaats van 'echo $[1+2]' zal worden voorgesteld om de syntaxis '$((..))' te gebruiken. De constructie 'rm -rf "$STEAMROOT/"*' zal worden gemarkeerd als onveilig en kan de root-directory verwijderen als de $STEAMROOT-variabele niet is ingevuld, en het gebruik van 'echo {1..10}' zal worden gemarkeerd als niet-compatibel met dash en sh.
In de nieuwe versie:
- Een waarschuwing is toegevoegd voor uitspraken zoals 'local readonly foo'.
- Een waarschuwing is toegevoegd voor onbeschikbare commando's.
- Een waarschuwing is toegevoegd voor achterwaartse verwijzingen in 'declare x=1 y=$x'.
- Een waarschuwing is toegevoegd als $? wordt gebruikt voor het verstrekken van een exitstatus van echo, printf, [ ], [[ ]] en test.
- Een aanbeveling is toegevoegd voor het verwijderen van ((..))inarray[((idx))]=val.
- Een aanbeveling is toegevoegd voor het combineren van dubbele haakjes in wiskundige contexten.
- Een aanbeveling is toegevoegd voor het verwijderen van haakjes in de uitdrukking a[(x+1)]=val.
Bron: opennet.ru
