ΠΡΠ±Π»ΠΈΠΊΡΠ²Π°Π½Π° Π΅ Π²Π΅ΡΡΠΈΡΡΠ° Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠ° ShellCheck 0.9, ΠΊΠΎΡΡΠΎ ΡΠ°Π·Π²ΠΈΠ²Π° ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ° Π·Π° ΡΡΠ°ΡΠΈΡΠ΅Π½ Π°Π½Π°Π»ΠΈΠ· Π½Π° shell ΡΠΊΡΠΈΠΏΡΠΎΠ²Π΅, ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ°ΡΠ° ΠΎΡΠΊΡΠΈΠ²Π°Π½Π΅ΡΠΎ Π½Π° Π³ΡΠ΅ΡΠΊΠΈ Π² ΡΠΊΡΠΈΠΏΡΠΎΠ²Π΅ Ρ ΠΎΠ³Π»Π΅Π΄ ΠΎΡΠΎΠ±Π΅Π½ΠΎΡΡΠΈΡΠ΅ Π½Π° bash, sh, ksh ΠΈ dash. ΠΠΎΠ΄ΡΡ Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠ° Π΅ Π½Π°ΠΏΠΈΡΠ°Π½ Π½Π° Haskell ΠΈ ΡΠ΅ ΡΠ°Π·ΠΏΡΠΎΡΡΡΠ°Π½ΡΠ²Π° ΠΏΠΎΠ΄ Π»ΠΈΡΠ΅Π½Π·ΠΈΡ GPLv3. ΠΡΠ΅Π΄ΠΎΡΡΠ°Π²ΡΡ ΡΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΈ Π·Π° ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡ Ρ Vim, Emacs, VSCode, Sublime, Atom ΠΈ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΠΈΠ½ΡΠ΅Π³ΡΠΈΡΠ°Π½ΠΈ ΡΡΠ΅Π΄ΠΈ, ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ°ΡΠΈ ΠΈΠ·Ρ ΠΎΠ΄Π° Π·Π° Π³ΡΠ΅ΡΠΊΠΈ, ΡΡΠ²ΠΌΠ΅ΡΡΠΈΠΌ Ρ GCC.

ΠΠΎΠ΄Π΄ΡΡΠΆΠ° ΡΠ΅ ΠΎΡΠΊΡΠΈΠ²Π°Π½Π΅ΡΠΎ Π½Π° ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ½ΠΈ Π³ΡΠ΅ΡΠΊΠΈ Π² ΠΊΠΎΠ΄Π°, ΠΊΠΎΠΈΡΠΎ Π²ΠΎΠ΄ΡΡ Π΄ΠΎ ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π° ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡΠ° Ρ Π³ΡΠ΅ΡΠΊΠ°, ΠΊΠ°ΠΊΡΠΎ ΠΈ ΡΠ΅ΠΌΠ°Π½ΡΠΈΡΠ½ΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈ, ΠΏΡΠΈ ΠΊΠΎΠΈΡΠΎ ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π΅ ΡΠ΅ ΠΏΡΠ΅ΠΊΡΡΠ²Π°, Π½ΠΎ ΡΠ΅ Π½Π°Π±Π»ΡΠ΄Π°Π²Π°Ρ Π°Π½ΠΎΠΌΠ°Π»ΠΈΠΈ Π² ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π° ΡΠΊΡΠΈΠΏΡΠ°. ΠΠ½Π°Π»ΠΈΠ·Π°ΡΠΎΡΡΡ ΠΌΠΎΠΆΠ΅ ΡΡΡΠΎ Π΄Π° ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΡΠΈΡΠ° ΡΠ΅ΡΠ½ΠΈ ΠΌΠ΅ΡΡΠ°, Π½Π΅ΠΎΡΠ΅Π²ΠΈΠ΄Π½ΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈ ΠΈ ΠΊΠ°ΠΏΠ°Π½ΠΈ, ΠΊΠΎΠΈΡΠΎ ΠΌΠΎΠ³Π°Ρ Π΄Π° Π΄ΠΎΠ²Π΅Π΄Π°Ρ Π΄ΠΎ ΡΡΠΈΠ²ΠΎΠ²Π΅ ΠΏΡΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈ ΠΎΠ±ΡΡΠΎΡΡΠ΅Π»ΡΡΠ²Π°.
ΠΡ ΠΊΠ»Π°ΡΠΎΠ²Π΅ΡΠ΅ Π½Π° ΠΎΡΠΊΡΠΈΡΠΈΡΠ΅ Π³ΡΠ΅ΡΠΊΠΈ ΠΌΠΎΠ³Π°Ρ Π΄Π° ΡΠ΅ ΠΎΡΠ±Π΅Π»Π΅ΠΆΠ°Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈ Ρ escaping Π½Π° ΡΠΏΠ΅ΡΠΈΠ°Π»Π½ΠΈ ΡΠΈΠΌΠ²ΠΎΠ»ΠΈ ΠΈ ΠΎΠ±ΡΠ°ΠΌΡΠ²Π°Π½Π΅ Π² ΠΊΠ°Π²ΠΈΡΠΊΠΈ, Π³ΡΠ΅ΡΠΊΠΈ Π² ΡΡΠ»ΠΎΠ²Π½ΠΈ ΠΈΠ·ΡΠ°Π·ΠΈ, Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»Π½Π° ΡΠΏΠΎΡΡΠ΅Π±Π° Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ, ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈ Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ°ΡΠ° Π½Π° Π²ΡΠ΅ΠΌΠ΅ ΠΈ Π΄Π°ΡΠΈ, ΠΈ ΡΠΈΠΏΠΈΡΠ½ΠΈ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ½ΠΈ Π³ΡΠ΅ΡΠΊΠΈ Π½Π° Π½Π°ΡΠΈΠ½Π°Π΅ΡΠΈ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π»ΠΈΠΏΡΠ°ΡΠ° Π½Π° ΠΈΠ½ΡΠ΅ΡΠ²Π°Π»ΠΈ ΠΏΡΠΈ ΡΡΠ°Π²Π½Π΅Π½ΠΈΠ΅ β[[ $foo==0 ]]β, Π½Π°Π»ΠΈΡΠΈΠ΅ Π½Π° ΠΈΠ½ΡΠ΅ΡΠ²Π°Π»ΠΈ βvar = 42β ΠΈΠ»ΠΈ Π·Π°Π΄Π°Π²Π°Π½Π΅ Π½Π° ΡΠΈΠΌΠ²ΠΎΠ»Π° $ ΠΏΡΠΈ ΠΏΡΠΈΡΠ²ΠΎΡΠ²Π°Π½Π΅ β$foo=42β, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ Π½Π° ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ Π±Π΅Π· ΠΊΠ°Π²ΠΈΡΠΊΠΈ βecho $1β, Π·Π°Π΄Π°Π²Π°Π½Π΅ Π½Π° ΠΈΠ·Π»ΠΈΡΠ½ΠΈ ΠΊΠ²Π°Π΄ΡΠ°ΡΠ½ΠΈ ΡΠΊΠΎΠ±ΠΊΠΈ Π² βtr -cd β[a-zA-Z0-9]'β.
ΠΠΎΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π½ΠΎ ΡΠ΅ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ° ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΡΠ½Π΅ΡΠΎ Π½Π° ΠΏΡΠ΅ΠΏΠΎΡΡΠΊΠΈ Π·Π° ΠΏΠΎΠ΄ΠΎΠ±ΡΡΠ²Π°Π½Π΅ Π½Π° ΡΡΠΈΠ»Π° Π½Π° ΠΊΠΎΠ΄Π°, ΡΠ΅ΡΠ°Π²Π°Π½Π΅ Π½Π° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈ Ρ ΠΏΡΠ΅Π½ΠΎΡΠΈΠΌΠΎΡΡΡΠ° ΠΈ ΠΏΠΎΠ²ΠΈΡΠ°Π²Π°Π½Π΅ Π½Π° Π½Π°Π΄Π΅ΠΆΠ΄Π½ΠΎΡΡΡΠ° Π½Π° ΡΠΊΡΠΈΠΏΡΠΎΠ²Π΅ΡΠ΅. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π²ΠΌΠ΅ΡΡΠΎ βecho $[1+2]β ΡΠ΅ ΡΠ΅ ΠΏΡΠ΅ΠΏΠΎΡΡΡΠ° Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΡΡ β$((..))β, ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΡΡΠ° βrm -rf β$STEAMROOT/β*β ΡΠ΅ Π±ΡΠ΄Π΅ ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ΅Π½Π° ΠΊΠ°ΡΠΎ Π½Π΅Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½Π° ΠΈ ΡΠΏΠΎΡΠΎΠ±Π½Π° Π΄Π° ΠΈΠ·ΡΡΠΈΠ΅ ΠΊΠΎΡΠ΅Π½ΠΎΠ²Π°ΡΠ° Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ ΠΏΡΠΈ Π½Π΅Π·Π°ΠΏΡΠ»Π²Π°Π½Π΅ Π½Π° ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°ΡΠ° $STEAMROOT, Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ Π½Π° βecho {1..10}β ΡΠ΅ Π±ΡΠ΄Π΅ ΠΏΠΎΠ΄ΡΠ΅ΡΡΠ°Π½ΠΎ ΠΊΠ°ΡΠΎ Π½Π΅ΡΡΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎ Ρ dash ΠΈ sh.
Π Π½ΠΎΠ²Π°ΡΠ° Π²Π΅ΡΡΠΈΡ:
- ΠΠΎΠ±Π°Π²Π΅Π½ΠΎ Π΅ ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ Π·Π° ΠΈΠ·ΡΠ°Π·ΠΈ ΠΎΡ Π²ΠΈΠ΄Π° βlocal readonly fooβ.
- ΠΠΎΠ±Π°Π²Π΅Π½ΠΎ Π΅ ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ Π·Π° Π½Π΅Π΄ΠΎΡΡΡΠΏΠ½ΠΎΡΡ Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ.
- ΠΠΎΠ±Π°Π²Π΅Π½ΠΎ Π΅ ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ Π·Π° ΠΎΠ±ΡΠ°ΡΠ½ΠΈ ΡΠ΅ΡΠ΅ΡΠ΅Π½ΡΠΈΠΈ Π² βdeclare x=1 y=$xβ.
- ΠΠΎΠ±Π°Π²Π΅Π½ΠΎ Π΅ ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΠ΅, Π°ΠΊΠΎ $? ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π·Π° ΠΈΠ·Π²Π΅ΠΆΠ΄Π°Π½Π΅ Π½Π° ΠΊΠΎΠ΄ Π½Π° Π²ΡΡΡΠ°Π½Π΅ ΠΎΡ echo, printf, [ ], [[ ]] ΠΈ test.
- ΠΠΎΠ±Π°Π²Π΅Π½Π° Π΅ ΠΏΡΠ΅ΠΏΠΎΡΡΠΊΠ° Π·Π° ΠΏΡΠ΅ΠΌΠ°Ρ Π²Π°Π½Π΅ Π½Π° ((..))inarray[((idx))]=val.
- ΠΠΎΠ±Π°Π²Π΅Π½Π° Π΅ ΠΏΡΠ΅ΠΏΠΎΡΡΠΊΠ° Π·Π° ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡΠ°Π½Π΅ Π½Π° Π΄Π²ΠΎΠΉΠ½ΠΈ ΡΠΊΠΎΠ±ΠΈ Π² Π°ΡΠΈΡΠΌΠ΅ΡΠΈΡΠ½ΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠΈ.
- ΠΠΎΠ±Π°Π²Π΅Π½Π° ΠΏΡΠ΅ΠΏΠΎΡΡΠΊΠ° Π·Π° ΠΏΡΠ΅ΠΌΠ°Ρ Π²Π°Π½Π΅ Π½Π° ΠΊΡΡΠ³Π»ΠΈ ΡΠΊΠΎΠ±ΠΈ Π² ΠΈΠ·ΡΠ°Π·Π° a[(x+1)]=val.
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: opennet.ru
