์‰˜ ์Šคํฌ๋ฆฝํŠธ์šฉ ์ •์  ๋ถ„์„๊ธฐ์ธ ShellCheck 0.9๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

bash, sh, ksh ๋ฐ dash์˜ ๊ธฐ๋Šฅ์„ ๊ณ ๋ คํ•˜์—ฌ ์Šคํฌ๋ฆฝํŠธ์˜ ์˜ค๋ฅ˜ ์‹๋ณ„์„ ์ง€์›ํ•˜๋Š” ์‰˜ ์Šคํฌ๋ฆฝํŠธ์˜ ์ •์  ๋ถ„์„ ์‹œ์Šคํ…œ์„ ๊ฐœ๋ฐœํ•˜๋Š” ShellCheck 0.9 ํ”„๋กœ์ ํŠธ ๋ฆด๋ฆฌ์Šค๊ฐ€ ๋ฐœํ‘œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ํ”„๋กœ์ ํŠธ ์ฝ”๋“œ๋Š” Haskell๋กœ ์ž‘์„ฑ๋˜์—ˆ์œผ๋ฉฐ GPLv3 ๋ผ์ด์„ผ์Šค์— ๋”ฐ๋ผ ๋ฐฐํฌ๋ฉ๋‹ˆ๋‹ค. Vim, Emacs, VSCode, Sublime, Atom ๋ฐ GCC ํ˜ธํ™˜ ์˜ค๋ฅ˜ ๋ณด๊ณ ๋ฅผ ์ง€์›ํ•˜๋Š” ๋‹ค์–‘ํ•œ ํ”„๋ ˆ์ž„์›Œํฌ์™€์˜ ํ†ตํ•ฉ์„ ์œ„ํ•œ ๊ตฌ์„ฑ ์š”์†Œ๊ฐ€ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค.

์‰˜ ์Šคํฌ๋ฆฝํŠธ์šฉ ์ •์  ๋ถ„์„๊ธฐ์ธ ShellCheck 0.9๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋Š” ์‹คํ–‰ ์‹œ ์ธํ„ฐํ”„๋ฆฌํ„ฐ๊ฐ€ ์˜ค๋ฅ˜๋ฅผ ํ‘œ์‹œํ•˜๋„๋ก ํ•˜๋Š” ์ฝ”๋“œ์˜ ๊ตฌ๋ฌธ ์˜ค๋ฅ˜์™€ ์‹คํ–‰์ด ์ค‘๋‹จ๋˜์ง€ ์•Š์ง€๋งŒ ์Šคํฌ๋ฆฝํŠธ ๋™์ž‘์— ์ด์ƒ์ด ๋ฐœ์ƒํ•˜๋Š” ์˜๋ฏธ๋ก ์  ๋ฌธ์ œ๋ฅผ ๋ชจ๋‘ ์‹๋ณ„ํ•˜๋Š” ๊ฒƒ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ๋ถ„์„๊ธฐ๋Š” ํŠน์ • ์ƒํ™ฉ์—์„œ ์˜ค๋ฅ˜๋กœ ์ด์–ด์งˆ ์ˆ˜ ์žˆ๋Š” ๋ณ‘๋ชฉ ํ˜„์ƒ, ๋ถˆ๋ถ„๋ช…ํ•œ ๋ฌธ์ œ ๋ฐ ํ•จ์ •์„ ์‹๋ณ„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฐ์ง€๋œ ์˜ค๋ฅ˜ ํด๋ž˜์Šค ์ค‘์—์„œ ํŠน์ˆ˜ ๋ฌธ์ž๋ฅผ ์ด์Šค์ผ€์ดํ”„ ์ฒ˜๋ฆฌํ•˜๊ณ  ๋”ฐ์˜ดํ‘œ๋กœ ๋ฌถ๋Š” ๋ฌธ์ œ, ์กฐ๊ฑด์‹์˜ ์˜ค๋ฅ˜, ๋ช…๋ น์˜ ์ž˜๋ชป๋œ ์‚ฌ์šฉ, ์‹œ๊ฐ„ ๋ฐ ๋‚ ์งœ ์ฒ˜๋ฆฌ ๋ฌธ์ œ, ์ดˆ๋ณด์ž๋ฅผ ์œ„ํ•œ ์ผ๋ฐ˜์ ์ธ ๊ตฌ๋ฌธ ์˜ค๋ฅ˜ ๋“ฑ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด โ€œ[[ $foo==0 ]]โ€๋ฅผ ๋น„๊ตํ•  ๋•Œ ๊ณต๋ฐฑ์ด ์—†๊ฑฐ๋‚˜ โ€œvar = 42โ€ ๊ณต๋ฐฑ์ด ์žˆ๊ฑฐ๋‚˜ โ€œ$foo=42โ€๋ฅผ ํ• ๋‹นํ•  ๋•Œ $ ๊ธฐํ˜ธ ํ‘œ์‹œ, ๋ณ€์ˆ˜ ์‚ฌ์šฉ ๋”ฐ์˜ดํ‘œ "echo $1" ์—†์ด "tr -cd '[a-zA-Z0-9]'"์— ์ถ”๊ฐ€ ๋Œ€๊ด„ํ˜ธ ํ‘œ์‹œ,

๋˜ํ•œ ์ฝ”๋“œ ์Šคํƒ€์ผ ๊ฐœ์„ , ์ด์‹์„ฑ ๋ฌธ์ œ ์ œ๊ฑฐ, ์Šคํฌ๋ฆฝํŠธ ์‹ ๋ขฐ์„ฑ ํ–ฅ์ƒ์„ ์œ„ํ•œ ๊ถŒ์žฅ ์‚ฌํ•ญ ์ถœ๋ ฅ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, "echo $[1+2]" ๋Œ€์‹  "$((..))" ๊ตฌ๋ฌธ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ œ์•ˆ๋˜๋ฉฐ 'rm -rf "$STEAMROOT/"*' ๊ตฌ๋ฌธ์€ ์•ˆ์ „ํ•˜์ง€ ์•Š์€ ๊ฒƒ์œผ๋กœ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ๋ณ€์ˆ˜๊ฐ€ $STEAMROOT๋กœ ์ฑ„์›Œ์ง€์ง€ ์•Š์€ ๊ฒฝ์šฐ ๋ฃจํŠธ ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ์‚ญ์ œํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ "echo {1..10}" ์‚ฌ์šฉ์€ ๋Œ€์‹œ ๋ฐ sh์™€ ํ˜ธํ™˜๋˜์ง€ ์•Š๋Š” ๊ฒƒ์œผ๋กœ ๊ฐ•์กฐ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

์ƒˆ ๋ฒ„์ „์—์„œ:

  • 'local readonly foo'์™€ ๊ฐ™์€ ํ‘œํ˜„์— ๋Œ€ํ•œ ๊ฒฝ๊ณ ๊ฐ€ ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋Š” ๋ช…๋ น์— ๋Œ€ํ•œ ๊ฒฝ๊ณ ๊ฐ€ ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • 'x=1 y=$x ์„ ์–ธ'์— ๋ฐฑ๋งํฌ์— ๋Œ€ํ•œ ๊ฒฝ๊ณ ๋ฅผ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • $?์ธ ๊ฒฝ์šฐ ๊ฒฝ๊ณ ๊ฐ€ ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. echo, printf, [ ], [[ ]] ๋ฐ test์˜ ๋ฐ˜ํ™˜ ์ฝ”๋“œ๋ฅผ ์ธ์‡„ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
  • ((..))inarray[((idx))]=val์„ ์ œ๊ฑฐํ•˜๋ผ๋Š” ๊ถŒ์žฅ ์‚ฌํ•ญ์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • ์‚ฐ์ˆ  ์ปจํ…์ŠคํŠธ์—์„œ ์ด์ค‘ ๊ด„ํ˜ธ๋ฅผ ์—ฐ๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ๊ถŒ์žฅ ์‚ฌํ•ญ์„ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • a[(x+1)]=val ํ‘œํ˜„์‹์—์„œ ๊ด„ํ˜ธ๋ฅผ ์ œ๊ฑฐํ•˜๋ผ๋Š” ๊ถŒ์žฅ ์‚ฌํ•ญ์„ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.

์ถœ์ฒ˜ : opennet.ru

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€