bash, sh, ksh ๋ฐ dash์ ๊ธฐ๋ฅ์ ๊ณ ๋ คํ์ฌ ์คํฌ๋ฆฝํธ์ ์ค๋ฅ ์๋ณ์ ์ง์ํ๋ ์ ์คํฌ๋ฆฝํธ์ ์ ์ ๋ถ์ ์์คํ ์ ๊ฐ๋ฐํ๋ ShellCheck 0.9 ํ๋ก์ ํธ ๋ฆด๋ฆฌ์ค๊ฐ ๋ฐํ๋์์ต๋๋ค. ํ๋ก์ ํธ ์ฝ๋๋ Haskell๋ก ์์ฑ๋์์ผ๋ฉฐ GPLv3 ๋ผ์ด์ผ์ค์ ๋ฐ๋ผ ๋ฐฐํฌ๋ฉ๋๋ค. Vim, Emacs, VSCode, Sublime, Atom ๋ฐ GCC ํธํ ์ค๋ฅ ๋ณด๊ณ ๋ฅผ ์ง์ํ๋ ๋ค์ํ ํ๋ ์์ํฌ์์ ํตํฉ์ ์ํ ๊ตฌ์ฑ ์์๊ฐ ์ ๊ณต๋ฉ๋๋ค.
์ด๋ ์คํ ์ ์ธํฐํ๋ฆฌํฐ๊ฐ ์ค๋ฅ๋ฅผ ํ์ํ๋๋ก ํ๋ ์ฝ๋์ ๊ตฌ๋ฌธ ์ค๋ฅ์ ์คํ์ด ์ค๋จ๋์ง ์์ง๋ง ์คํฌ๋ฆฝํธ ๋์์ ์ด์์ด ๋ฐ์ํ๋ ์๋ฏธ๋ก ์ ๋ฌธ์ ๋ฅผ ๋ชจ๋ ์๋ณํ๋ ๊ฒ์ ์ง์ํฉ๋๋ค. ๋ํ ๋ถ์๊ธฐ๋ ํน์ ์ํฉ์์ ์ค๋ฅ๋ก ์ด์ด์ง ์ ์๋ ๋ณ๋ชฉ ํ์, ๋ถ๋ถ๋ช ํ ๋ฌธ์ ๋ฐ ํจ์ ์ ์๋ณํ ์ ์์ต๋๋ค.
๊ฐ์ง๋ ์ค๋ฅ ํด๋์ค ์ค์์ ํน์ ๋ฌธ์๋ฅผ ์ด์ค์ผ์ดํ ์ฒ๋ฆฌํ๊ณ ๋ฐ์ดํ๋ก ๋ฌถ๋ ๋ฌธ์ , ์กฐ๊ฑด์์ ์ค๋ฅ, ๋ช ๋ น์ ์๋ชป๋ ์ฌ์ฉ, ์๊ฐ ๋ฐ ๋ ์ง ์ฒ๋ฆฌ ๋ฌธ์ , ์ด๋ณด์๋ฅผ ์ํ ์ผ๋ฐ์ ์ธ ๊ตฌ๋ฌธ ์ค๋ฅ ๋ฑ์ ํ์ธํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด โ[[ $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