Është publikuar versioni 0.9 i projektit ShellCheck, i cili zhvillon një sistem analizimi statik për shell scripts, duke mbështetur identifikimin e gabimeve në skriptet me shpërndarjen e veçorive të bash, sh, ksh dhe dash. Kodi i projektit është shkruar në gjuhën Haskell dhe shpërndahet nën licencën GPLv3. Ofrohen komponentë për integrim me Vim, Emacs, VSCode, Sublime, Atom dhe mjedise të ndryshme të integruara që mbështesin daljen e informacionit mbi gabimet në përputhje me GCC.

Mbështetet identifikimi në kod si të gabimeve sintaksore që shkaktojnë një gabim në ekzekutimin e interpretorit, ashtu edhe problemeve semantike, të cilat, ndonëse ekzekutimi nuk ndërpritet, shkaktojnë anomali në sjelljen e skriptit. Analizuesi gjithashtu mund të identifikojë ngushticat, problemet e padukshme dhe pengesat që mund të çojnë në dështime nën disa rrethana.
Nga klasat e gabimeve që identifikohen, mund të përmendim problemet me ekranuar simbolat e veçantë dhe kufizimin me citoj, gabimet në shprehjet kushtore, përdorimin e pasaktë të komandeve, si dhe problemet me përpunimin e kohës dhe datave, si dhe gabime sintaksore tipike të fillestarëve. Për shembull, mungesa e hapësirave gjatë krahasimit «[[ $foo==0 ]]», pranimi i hapësirave «var = 42» ose indicimi i simbolit $ gjatë caktimit «$foo=42», përdorimi i variablave pa citoj «echo $1», indicimi i skedave të tepërta në «tr -cd ‘[a-zA-Z0-9]'»
Përveç kësaj, mbështetet ofrimi i rekomandimeve për përmirësimin e stilit të kodit, eliminimin e problemeve me portabilitetin dhe rritjen e besueshmërisë së funksionimit të skripteve. Për shembull, në vend të «echo $[1+2]» do të rekomandohet përdorimi i sintaksës «$((..))», konstrukti ‘rm -rf «$STEAMROOT/»*’ do të shënohet si e pasigurt dhe në gjendje të fshijë katalogun rrënjë nëse variabla $STEAMROOT nuk është e mbushur, ndërsa përdorimi i «echo {1..10}» do të theksohet si jo përputhës me dash dhe sh.
Në këtë version të ri:
- Është shtuar një paralajmërim për shprehjet e llojit ‘local readonly foo’.
- Është shtuar një paralajmërim për komandat që nuk janë të disponueshme.
- Është shtuar një paralajmërim për referencat e prapme në ‘declare x=1 y=$x’.
- Është shtuar një paralajmërim, nëse $? përdoret për të dhënë kodin e kthimit të echo, printf, [ ], [[ ]] dhe test.
- Është shtuar një rekomandim për të fshirë ((..))inarray[((idx))]=val.
- Është shtuar një rekomandim për të bashkuar dyfishin e kornizave në kontekste aritmetike.
- Është shtuar një rekomandim për të fshirë kornizat e rretha në shprehjen a[(x+1)]=val.
Burimi: opennet.ru
