๐ ๋ฐฉ์ฑ๋ฒ ๋ธ๋ก๊ทธ > ๐ง ๋ฆฌ๋ ์ค
๋ฐฐ์ด์ ํตํด ์ฌ๋ฌ ๊ฐ์ ํจ๊ณผ์ ์ผ๋ก ๋ค๋ฃฐ ์ ์์ต๋๋ค.
๋ฐฐ์(Bash)๋ ์ฌ๋ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ๊ฐ์ด ๋ฐฐ์ด ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค. ๋ฐฐ์ด์ ์ฌ๋ฌ ๊ฐ์ ํ๋์ ๋ณ์์ ๋ณด๊ดํ ์ ์๋๋ก ํด์ค๋๋ค. ์๋ก์ด ๊ฐ์ ์ถ๊ฐํ๊ฑฐ๋ ์ด๋ฏธ ์กด์ฌํ๋ ๊ฐ์ ์์ ๋๋ ์ญ์ ํ ์ ์์ต๋๋ค.
๋ณ์์ด๋ฆ=(๊ฐ1 ๊ฐ2 ๊ฐ3)
ํํ๋ก ๋ฐฐ์ด์ ์์ฑํฉ๋๋ค1. ๋ฐฐ์ด์ ๊ฐ์ ๋์ด์ฐ๊ธฐ๋ก ๊ตฌ๋ถํจ์ ์ฃผ์ํ์ธ์.
ASDF=(100 200 Hello)
๊ณต๋ฐฑ์ ํฌํจํ ๋ฌธ์์ด์ [๋ฐฐ์]์ ๋ฌธ๋ฒ ์ ํฐ๋ฐ์ดํ๋ ์์๋ฐ์ดํ๋ก ๋ฌถ์ด์ผ ํฉ๋๋ค:
ASDF=("H e l l o" 'w o r l d')
๋ค๋ฅธ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ๋ฌ๋ฆฌ, ๋ฐฐ์์์๋ =
์ข์ฐ์ ๋์ด์ฐ๊ธฐ๊ฐ ์์ผ๋ฉด ์ ๋ฉ๋๋ค:
ASDF = (100 200 Hello) # ์๋ชป๋จ!
์ ์ฝ๋๋ฅผ ์คํํ๋ฉด ๋ค์๊ณผ ๊ฐ์ด ์ค๋ฅ๋ฅผ ์ถ๋ ฅํฉ๋๋ค:
-bash: syntax error near unexpected token `('
๋ฐฐ์ด๋ก๋ถํฐ ๊ฐ์ ํ๋ ์ป๊ธฐ ์ํด์๋ ${๋ณ์์ด๋ฆ[์ธ๋ฑ์ค]}
ํํ๋ฅผ ์ฌ์ฉํฉ๋๋ค.
์ธ๋ฑ์ค๋ ๊ฐ์ด ๋ฐฐ์ด์ ์ด๋์ ์์นํด์๋์ง๋ฅผ ๊ฐ๋ฆฌํค๋ ์์ ๋๋ค. ๋ฐฐ์ด์ ๋ง๋ค ๋ ๋์ดํ ์์๋๋ก ์ธ๋ฑ์ค๊ฐ ์ง์ ๋ฉ๋๋ค. ์ธ๋ฑ์ค๊ฐ 0์ด๋ผ๋ฉด 1๋ฒ์งธ ๊ฐ์, ์ธ๋ฑ์ค๊ฐ 1์ด๋ผ๋ฉด 2๋ฒ์งธ ๊ฐ์ ์๋ฏธํฉ๋๋ค. (์ธ๋ฑ์ค๋ 1์ด ์๋๋ผ 0๋ถํฐ ์์ํฉ๋๋ค2)
๋ค์์ ๋ฐฐ์ด์ 100
, 200
, 300
์ ๋ฃ์ ๋ค ์์๋๋ก ์ถ๋ ฅํ๋ ์ฝ๋์
๋๋ค:
ASDF=(100 200 300)
echo ${ASDF[0]}
echo ${ASDF[1]}
echo ${ASDF[2]}
์ถ๋ ฅ ๊ฒฐ๊ณผ:
100
200
300
๊ฐ์ ์ป๊ธฐ ์ํด์๋ echo ${ASDF[2]}
์ฒ๋ผ ์ค๊ดํธ๋ฅผ ๋ฐ๋์ ๋ถ์ฌ์ผ ํฉ๋๋ค. echo $ASDF[2]
์ฒ๋ผ ์ค๊ดํธ๋ฅผ ๋ถ์ด์ง ์์ผ๋ฉด, ๋ฐฐ์๋ ASDF[2]
๋ฅผ ํต์งธ๋ก ๋ณ์๋ก์ ์ธ์ํ์ง ์๊ณ ASDF
๊น์ง๋ง ์ธ์ํฉ๋๋ค.
๊ทธ ์ด์ ๋ ๋๊ดํธ๊ฐ ํน๋ณํ ๊ฐ์ผ๋ก ๋จผ์ ์ทจ๊ธ๋๊ธฐ ๋๋ฌธ์
๋๋ค3. ๋๊ดํธ ์์ด $ASDF[2]
์ฒ๋ผ ํ๋ค๋ฉด ๋ฐฐ์๋ $ASDF
์ [2]
๋ก ๋๋์ด ์ธ์ํฉ๋๋ค.
Note
echo $ASDF[2]
์ฒ๋ผ ํ๋ค๊ณ ํด์ ์ค๋ฅ๊ฐ ๋ฐ์ํ์ง๋ ์์ต๋๋ค. ์ด๋ ๋ฐฐ์์์ $ASDF
๊ฐ์ด ๋ฐฐ์ด ์ด๋ฆ ์์ฒด์ ์ ๊ทผํ๋ ๊ฒ์ ํ์ฉํ๊ณ ์๊ธฐ ๋๋ฌธ์ธ๋ฐ์, ์์ธํ ๋ด์ฉ์ ์ ์ ๋ค์ ์์๋ณด๊ฒ ์ต๋๋ค.
์ ์ฒด ๊ฐ์ ์ป๋ ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ์ด 4๊ฐ์ง ํํ๊ฐ ์์ต๋๋ค4:
${๋ณ์์ด๋ฆ[@]}
: ์ธ๋ฑ์ค๊ฐ ๋ค์ด๊ฐ ์๋ฆฌ์ @
${๋ณ์์ด๋ฆ[*]}
: ์ธ๋ฑ์ค๊ฐ ๋ค์ด๊ฐ ์๋ฆฌ์ *
"${๋ณ์์ด๋ฆ[@]}"
: ํฐ๋ฐ์ดํ(""
)๋ก ๋ฌถ์ ๋ค ์ธ๋ฑ์ค๊ฐ ๋ค์ด๊ฐ ์๋ฆฌ์ @
"${๋ณ์์ด๋ฆ[*]}"
: ํฐ๋ฐ์ดํ(""
)๋ก ๋ฌถ์ ๋ค ์ธ๋ฑ์ค๊ฐ ๋ค์ด๊ฐ ์๋ฆฌ์ *
๋ค์๊ณผ ๊ฐ์ ๋ฐฐ์ด์ด ์กด์ฌํ๋ค๊ณ ํ์ ๋:
ASDF[0]="A A"
ASDF[1]="B B"
๊ฐ ํํ ๋ณ๋ก ๋ค์ํ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์ ๋๋ค:
๋ช ๋ น์ด | ์ค๊ฐ ๊ฒฐ๊ณผ | ์ถ๋ ฅ | ๊ณต๋ฐฑ | ์ํ์ฑ | ํน์ง |
---|---|---|---|---|---|
echo ${ASDF[@]} |
echo A A B B |
A A B B |
๋ฌด์๋จ | โ ๏ธ ์กด์ฌ | ํ๋์ ๊ฐ์์ ๊ณต๋ฐฑ์ผ๋ก ๊ตฌ๋ถ๋ ๊ฐ ๋ถ๋ถ์ ๊ฐ๋ณ์ ์ธ ๋ฌธ์์ด๋ก์ ์ทจ๊ธ |
echo ${ASDF[*]} |
echo A A B B |
A A B B |
๋ฌด์๋จ | โ ๏ธ ์กด์ฌ | ํ๋์ ๊ฐ์์ ๊ณต๋ฐฑ์ผ๋ก ๊ตฌ๋ถ๋ ๊ฐ ๋ถ๋ถ์ ๊ฐ๋ณ์ ์ธ ๋ฌธ์์ด๋ก์ ์ทจ๊ธ |
echo "${ASDF[@]}" |
echo "A A" "B B" |
A A B B |
๋ณด์กด๋จ | ์์ | ๊ฐ ๊ฐ์ ๊ฐ๋ณ์ ์ธ ๋ฌธ์์ด๋ก์ ์ทจ๊ธ |
echo "${ASDF[*]}" |
echo "A A B B" |
A A B B |
๋ณด์กด๋จ | โ ๏ธ ์กด์ฌ | ๋ฐฐ์ด์ ์กด์ฌํ๋ ๋ชจ๋ ๊ฐ์ ํ๋์ ๋ฌธ์์ด๋ก์ ์ทจ๊ธ |
Note
๋ฐฐ์๋ ๊ฐ๋ณ์ ์ผ๋ก ์ทจ๊ธํ๋ ๋ฌธ์์ด๊ณผ ๋ฌธ์์ด ์ฌ์ด์ ๊ณต๋ฐฑ์ ํ๋๋ก ํฉ์น๋ ์ฑ์ง์ด ์์ต๋๋ค. ์ด ์ฑ์ง์ ๊ดํด์๋...
๊ฒฐ๋ก 1: ๋ฐฐ์ด์ ๊ฐ์ ๊ณต๋ฐฑ์ด ๋ค์ด๊ฐ์ง ์์์ ๋ณด์ฅํ ์ ์๋ค๋ฉด echo ${ASDF[@]}
๋ echo ${ASDF[*]}
์ ์ฌ์ฉํด๋ ๋ฌด๋ฐฉํฉ๋๋ค.
๊ฒฐ๋ก 2: ๊ทธ๋ ์ง ์๊ณ ์ผ๋ง๋ ์ง ๊ณต๋ฐฑ์ด ๋ค์ด๊ฐ ์ ์๋ค๋ฉด ๊ฐ ๊ฐ์ ๊ฐ๋ณ์ ์ธ ๋ฌธ์์ด๋ก์ ์ทจ๊ธํ๋ echo "${ASDF[@]}"
ํํ๋ฅผ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
๋ณ์์ด๋ฆ[์ธ๋ฑ์ค]=๊ฐ
ํํ๋ก ํน์ ์ธ๋ฑ์ค์ ์กด์ฌํ๋ ๊ฐ์ ๋ณ๊ฒฝํฉ๋๋ค. ์ธ๋ฑ์ค์ ๊ฐ์ด ์กด์ฌํ์ง ์๋๋ค๋ฉด ์ ๊ฐ์ ์ถ๊ฐํฉ๋๋ค5.
๋ค์์ ๋ฐฐ์ด์ 100
, 200
, 300
์ ๋ฃ์ ๋ค, 100
์ 99999
๋ก ๋ณ๊ฒฝํ๋ ์ฝ๋์
๋๋ค:
ASDF=(100 200 300)
ASDF[0]=99999
๋ค์์ Hello
๋ผ๋ ๊ฐ ํ๋๋ง ๋ค์ด๊ฐ ๋ฐฐ์ด์ ๋ง๋ ๋ค, ์ฌ๊ธฐ์ Linus
์ Torvalds
๋ฅผ ์ถ๊ฐํ๋ ์ฝ๋์
๋๋ค:
ASDF=(Hello)
ASDF[1]=Linus
ASDF[2]=Torvalds
๊ณต๋ฐฑ์ ํฌํจํ ๋ฌธ์์ด์ [๋ฐฐ์]์ ๋ฌธ๋ฒ ์ ํฐ๋ฐ์ดํ๋ ์์๋ฐ์ดํ๋ก ๋ฌถ์ด์ผ ํฉ๋๋ค:
ASDF[0]="Brian Fox"
ASDF[1]='Stephen Bourne'
๋ค๋ฅธ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ๋ฌ๋ฆฌ [๋ฐฐ์]๋ ๋ฐฐ์ด์ด ์กด์ฌํ์ง ์์๋ ํด๋น ๋ณ์์ ๊ฐ์ ์ถ๊ฐํ ์ ์์ต๋๋ค. ๋ณ์๊ฐ ๋ฐฐ์ด์ด ์๋๋ผ๋ฉด ๋ฐฐ์๋ ์ด๋ฅผ ๋ฐฐ์ด๋ก ๋ง๋ญ๋๋ค6.
ASDF[0]=100 # ๋ฌธ์ ์์
ASDF[1]=200
๋๋ถ๋ถ์ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์์๋ ๋ฐฐ์ด์ ๋จผ์ ๋ง๋ค์ด๋์ด์ผ ๊ฐ์ ์ถ๊ฐํ ์ ์์ต๋๋ค. ํ์ด์ฌ์ด๋ผ๋ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ๊ฒฝ์ฐ ๋ค์๊ณผ ๊ฐ์ด ๋ฐฐ์ด์ ๋จผ์ ์ ์ธํด์ผ ํฉ๋๋ค:
asdf = [] # ๋ฐฐ์ด ์ ์ธ
asdf[0] = 100
asdf[1] = 200
asdf[2] = "Hello"
๋ฐฐ์๋ ๋ค๋ฅธ ๋ช๋ช ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ๋ฌ๋ฆฌ ๋ฐฐ์ด์ ๊ฐ์ ์ถ๊ฐํ ๋ ์ธ๋ฑ์ค 0๋ถํฐ ์ฐ์์ ์ผ๋ก ๊ฐ์ ์ฑ์๋๊ฐ์ง ์์๋ ๋ฉ๋๋ค7. ์ธ๋ฑ์ค 0, ์ธ๋ฑ์ค 1, ์ธ๋ฑ์ค 2๊ฐ์ด ์ฐ์์ ์ผ๋ก ์ฑ์ฐ์ง ์๊ณ ์ธ๋ฑ์ค 0, ์ธ๋ฑ์ค 5, ์ธ๋ฑ์ค 123๊ฐ์ด ๋ถ์ฐ์์ ์ผ๋ก ์ฑ์ธ ์๋ ์์ต๋๋ค.
๋ค์์ ์ธ๋ฑ์ค 12345์ 99999
๋ฅผ ์ถ๊ฐํ๋ ์ฝ๋์
๋๋ค:
ASDF=(100 200 300)
ASDF[12345]=99999
๋ฐฐ์ด์ ์์ฑํ ๋ ๋ฐฐ์ด์ด๋ฆ=([์ธ๋ฑ์ค]=๊ฐ [์ธ๋ฑ์ค]=๊ฐ)
ํํ๋ก ์ธ๋ฑ์ค๋ฅผ ์ง์ ํ์ฌ ์์ฑํ๋ ๊ฒ๋ ๊ฐ๋ฅํฉ๋๋ค8.
ASDF=([10]=100 [0]=200 [2]=300)
Note
(๊ฐ1 [์ธ๋ฑ์ค]=๊ฐ2 ๊ฐ3)
์ฒ๋ผ ์ธ๋ฑ์ค๋ฅผ ์ง์ ํ๋ ๊ฒ๊ณผ ์ง์ ํ์ง ์๋ ๊ฒ์ ํผ์ฉํ ์๋ ์์ต๋๋ค.
์ธ๋ฑ์ค๋ฅผ ๋ช ์ํ์ง ์์ ๊ฒฝ์ฐ์ ๊ท์น์ ์ธ์ ๋ ์ผ์ชฝ๋ณด๋ค 1 ๋ ํฐ ์ธ๋ฑ์ค์ ๋๋ค. ๋ค์ ์ฝ๋๋ฅผ ๋ณด์ธ์:
# [3]=Global [4]=World
ASDF=([10]=Welcome [2]=Hello Global World [50]=Bye)
echo ${ASDF[10]}
echo ${ASDF[2]}
echo ${ASDF[3]}
echo ${ASDF[4]}
echo ${ASDF[50]}
Global
์ [2]=Hello
์ ์ผ์ชฝ์ ์์ผ๋ฏ๋ก ์ธ๋ฑ์ค 3์ ํ ๋น๋ฉ๋๋ค. World
๋ Global
์ ์ธ๋ฑ์ค๋ณด๋ค 1 ๋ ํฐ ์ธ๋ฑ์ค 4์ ํ ๋น๋ฉ๋๋ค.
์คํ ๊ฒฐ๊ณผ:
Welcome
Hello
Global
World
Bye
๋ฐฐ์ด์ด๋ฆ+=(๊ฐ1 ๊ฐ2 ๊ฐ3)
ํํ๋ก ๋ฐฐ์ด์ ๊ฐ์ ์ถ๊ฐํฉ๋๋ค.
๋ค์์ ๋ฐฐ์ด์ ์์ฑํ ๋ค ๋ฐฐ์ด ๋์ ๊ฐ์ ์ถ๊ฐํ๋ ์ฝ๋์ ๋๋ค:
ASDF=(Alpha Beta Theta Gamma)
ASDF+=(123)
ASDF+=(456 789)
123
๊ณผ 456
, 789
๋ฅผ ์ถ๊ฐํ์ต๋๋ค.
๋จ ํ๋์ ๊ฐ์ ์ถ๊ฐํ๋ค๊ณ ํด๋ ๋ฐ๋์ ๊ดํธ๋ฅผ ๋ถ์ฌ์ผ ํฉ๋๋ค. ๋ค์ ์ฝ๋๋ฅผ ๋ณด์ธ์:
ASDF=(Alpha Beta Theta Gamma)
ASDF+=123 # ์๋ชป๋จ!
echo ${ASDF[0]}
๋ฐฐ์์ ์ธ๋ฑ์ค ์์ด ๋ฐฐ์ด ์ด๋ฆ๋ง์ผ๋ก ๋ฐฐ์ด์ ์ ๊ทผํ๋ ค ํ๋ฉด ๋ฐฐ์ด์ ์ฒซ ๋ฒ์งธ ๊ฐ์ฒ๋ผ ํด์ํ๋ ์ฑ์ง๋ก ์ธํด ASDF+=123
์ ASDF[0]+=123
๊ฐ์ด ํด์๋ฉ๋๋ค. +=
์ ๋ฐฐ์ด์ด ์๋ ๋ณ์์ ์ฌ์ฉํ๋ฉด ๋ฌธ์์ด์ ๋ถ์ด๋ ๋ฐฉ์์ผ๋ก ๋์ํฉ๋๋ค.
์คํ ๊ฒฐ๊ณผ:
Alpha123
ASDF[0]
์ ์กด์ฌํ๋ Alpha
์ 123
์ด ๋ถ์ด Alpha123
์ด๋ผ๋ ๊ฒฐ๊ณผ๊ฐ ๋์์ต๋๋ค.
${ASDF[@]}
๋ฅผ ์์ฉํด ๋ ๊ฐ์ ๋ฐฐ์ด์ ํ๋๋ก ํฉ์น๋(๊ฒฐํฉํ๋) ๋ฐ ์ฌ์ฉํ ์๋ ์์ต๋๋ค.
AAA=(123 456 789)
BBB=(1 4 7)
CCC=(${AAA[@]} ${BBB[@]})
echo ${CCC[@]}
์ถ๋ ฅ ๊ฒฐ๊ณผ:
123 456 789 1 4 7
์์ ๋ง์๋๋ ธ๋ฏ ๋ฐฐ์ด์ ๊ฐ์ด ๊ณต๋ฐฑ์ ํฌํจํ ์๋ ์๋ค๋ฉด ${๋ณ์์ด๋ฆ[@]}
๋์ ํฐ๋ฐ์ดํ๊ฐ ๋ค์ด๊ฐ "${๋ณ์์ด๋ฆ[@]}"
๋ฅผ ์ฌ์ฉํด์ผ ํฉ๋๋ค. ๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ ์ฌ๋ฌ ๊ณต๋ฐฑ์ ํ๋๋ก ๋ฌถ๋ ๋ฐฐ์์ ์ฑ์ง๋ก ์ธํด ๊ณต๋ฐฑ์ด ๋ชจ๋ ๋ฌด์๋๋ฉฐ ์ฌ๋ฌ ๊ฐ์ง ์๊ธฐ์น ์์ ๊ฒฐ๊ณผ๊ฐ ์ผ์ด๋ ์ ์์ต๋๋ค.
Note
๋ฐฐ์๋ ๊ฐ๋ณ์ ์ผ๋ก ์ทจ๊ธํ๋ ๋ฌธ์์ด๊ณผ ๋ฌธ์์ด ์ฌ์ด์ ๊ณต๋ฐฑ์ ํ๋๋ก ํฉ์น๋ ์ฑ์ง์ด ์์ต๋๋ค. ์ด ์ฑ์ง์ ๊ดํด์๋...
๋ค์์ ๋ฐฐ์ด์ ๊ฐ์ด ๊ณต๋ฐฑ์ ํฌํจํจ์๋ ๋ถ๊ตฌํ๊ณ ${๋ณ์์ด๋ฆ[@]}
์ ์ฌ์ฉํ ์๋ชป๋ ์ฝ๋์
๋๋ค:
AAA=("1 1" "2 2")
BBB=("b b" "B B")
CCC=(${AAA[@]} ${BBB[@]}) # ์๋ชป๋จ!
echo ${CCC[@]} # ์๋ชป๋จ!
์ถ๋ ฅ ๊ฒฐ๊ณผ:
1 1 2 2 b b B B
์ฌ๋ฌ ๊ณต๋ฐฑ์ ํ๋๋ก ๋ฌถ๋ ๋ฐฐ์์ ์ฑ์ง๋ก ์ธํด ๊ณต๋ฐฑ์ด ๋ชจ๋ ๋ฌด์๋ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค.
๋ค์์ ๊ณต๋ฐฑ์ ํฌํจํ๋ ๊ฐ์ ๊ฐ์ง ๋ฐฐ์ด์ ๋ํด, ์ ๋๋ก "${๋ณ์์ด๋ฆ[@]}"
์ ์ฌ์ฉํ ์ฝ๋์
๋๋ค:
AAA=("1 1" "2 2")
BBB=("b b" "B B")
CCC=("${AAA[@]}" "${BBB[@]}")
echo "${CCC[@]}"
์ถ๋ ฅ ๊ฒฐ๊ณผ:
1 1 2 2 b b B B
์์ ๋๋ก ๊ณต๋ฐฑ์ด ์ถ๋ ฅ๋จ์ ํ์ธํ ์ ์์ต๋๋ค.
${#๋ณ์์ด๋ฆ[@]}
(๋ณ์์ด๋ฆ
์์ #
์ด ์์ต๋๋ค) ํํ๋ก ๋ฐฐ์ด์ ๋ค์ด ์๋ ๊ฐ์ ๊ฐ์๋ฅผ ๊ตฌํฉ๋๋ค9.
ASDF=(123 456 789)
ZXCV=(A B C D E F G)
echo ${#ASDF[@]}
echo ${#ZXCV[@]}
์คํ ๊ฒฐ๊ณผ:
3
7
๋ฐฐ์ด์ ํฌ๊ธฐ๋ ์์ ์ธ๋ฑ์ค๋ถํฐ ๋ง์ง๋ง ์ธ๋ฑ์ค๊น์ง์ ๊ธธ์ด๋ฅผ ๊ตฌํ๋ ๊ฒ์ด ์๋๋๋ค. ์์ ํ ๋ฐฐ์ด์ ๋ค์ด ์๋ ๊ฐ์ ๊ฐ์๋ฅผ ๊ตฌํฉ๋๋ค.
ASDF=(123 456 [100]=789)
echo ${#ASDF[@]}
์คํ ๊ฒฐ๊ณผ:
3
์์ ์ธ๋ฑ์ค๋ถํฐ ๋ง์ง๋ง ์ธ๋ฑ์ค๊น์ง์ ๊ธธ์ด๋ฅผ ๊ตฌํ๋ ๊ฒ์ด์๋ค๋ฉด 100
์ ์ถ๋ ฅํด์ผ ํฉ๋๋ค. 3
์ ์ถ๋ ฅํ๋ ๊ฒ์ผ๋ก ๋ณด์ ๋ฐฐ์ด์ ๋ค์ด์๋ ๊ฐ์ ๊ฐ์๋ฅผ ๊ตฌํ๋ค๋ ๊ฒ์ ์ ์ ์์ต๋๋ค.
Note
${#๋ณ์์ด๋ฆ[1]}
๊ณผ ๊ฐ์ด ๊ธธ์ด๋ฅผ ๊ตฌํ ๋ @
๋์ ์ธ๋ฑ์ค๋ฅผ ๋ฃ์ ๊ฒฝ์ฐ, ๋ฐฐ์ด์ ์กด์ฌํ๋ ๊ฐ์ ๊ฐ์๋ฅผ ๊ตฌํ๋ ๊ฒ ์๋๋ผ ํด๋น ๊ฐ์ ๋ฌธ์์ด ๊ธธ์ด๋ฅผ ์ป์ต๋๋ค:
ASDF=(Short LongLongLong " ")
echo ${#ASDF[0]}
echo ${#ASDF[1]}
echo ${#ASDF[2]}
์คํ ๊ฒฐ๊ณผ:
5
12
2
Short
๋ 5๊ธ์, LongLongLong
์ 12๊ธ์, " "
์ 2๊ธ์์ด๋ฏ๋ก ๊ฐ๊ฐ 5
, 12
, 2
๊ฐ ์ถ๋ ฅ๋์์ต๋๋ค.
${!๋ณ์์ด๋ฆ[@]}
(๋ณ์์ด๋ฆ
์์ !
๊ฐ ์์ต๋๋ค) ํํ๋ก ๋ฐฐ์ด์ด ๊ฐ์ง ์ ์ฒด ์ธ๋ฑ์ค ๋ชฉ๋ก์ ์ป์ ์ ์์ต๋๋ค10.
ASDF=(123 456 789 [777]=TripleSeven)
echo ${!ASDF[@]}
์ถ๋ ฅ ๊ฒฐ๊ณผ:
0 1 2 777
for
๋ช
๋ น์ด๋ฅผ ํตํด ๋ฐฐ์ด์ ๊ฐ ํ๋ ํ๋์ ๋์ผํ ์ฐ์ฐ์ ์ํํ ์ ์์ต๋๋ค. ๊ฐ์ ๋๋์ผ๋ก ๋ณ๊ฒฝํ๊ฑฐ๋ ๋ชจ๋ ๊ฐ์ ์ถ๋ ฅํ ๋ ์ฌ์ฉํฉ๋๋ค.
ASDF=(111 222 333)
for V in "${ASDF[@]}"
do
echo $V
done
์ถ๋ ฅ ๊ฒฐ๊ณผ:
111
222
333
Note
for
๋ช
๋ น์ด์ ๊ดํ ์์ธํ ๋ด์ฉ์...
unset
๋ช
๋ น์ด๋ฅผ ํตํด ๋ฐฐ์ด์ ๊ฐ์ ์ ๊ฑฐํ ์ ์์ต๋๋ค. unset ๋ณ์์ด๋ฆ[0]
, unset ๋ณ์์ด๋ฆ[1]
ํํ์
๋๋ค. unset ๋ณ์์ด๋ฆ
ํํ๋ก ๋ฐฐ์ด ์ ์ฒด๋ฅผ ์ ๊ฑฐํ ์๋ ์์ต๋๋ค11.
๋ค์ ์ฝ๋๋ ๋ฐฐ์ด์ ๊ฐ์ ํ๋ ์ ๊ฑฐํฉ๋๋ค:
A[5]=123
unset A[5]
๋ค์ ์ฝ๋๋ ๋ฐฐ์ด ์ ์ฒด๋ฅผ ์ ๊ฑฐํฉ๋๋ค:
A=(123 456 789)
unset A
๋ฐฐ์๋ ๋ฐฐ์ด์ ๋น ๋ฌธ์์ด(๊ธธ์ด๊ฐ 0์ธ ๋ฌธ์์ด)์ด ๋ค์ด๊ฐ๋ ๊ฒ์ ์ ์์ ์ธ ๊ฐ์ ์ค์ ์ผ๋ก ์ทจ๊ธํฉ๋๋ค12.
ASDF=(123 456 789)
ASDF[2]= # ๋น ๋ฌธ์์ด ๋์
๊ทธ๋ฌ๋ฏ๋ก ๋น ๋ฌธ์์ด์ ๋์ ํ๋ ๊ฒ์ ๋ฐฐ์ด์ ์๋ ๊ฐ์ ์ ๊ฑฐํ๋ ๊ฒ ์๋๋ผ ๊ทธ์ ๋น ๋ฌธ์์ด๋ก ๋ฎ์ด์ธ ๋ฟ์ ๋๋ค.
ASDF=(123 456 789)
echo "Count:" ${#ASDF[@]}
echo "Get all:" ${ASDF[@]}
ASDF[1]=
echo "Count:" ${#ASDF[@]}
echo "Get all:" ${ASDF[@]}
์ถ๋ ฅ ๊ฒฐ๊ณผ:
Count: 3
Get all: 123 456 789
Count: 3
Get all: 123 789
๊ฐ์ด ์ ๊ฑฐ๋์ง ์๊ณ ๊ทธ๋๋ก ๋จ์์๋ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค.
ASDF[-1]
๊ณผ ๊ฐ์ด ์ธ๋ฑ์ค ์๋ฆฌ์ ์์๋ฅผ ์ฌ์ฉํ๋ฉด ๋ฐฐ์ด์ด ๊ฐ์ง ๋ง์ง๋ง ์ธ๋ฑ์ค์์๋ถํฐ ๊ฑฐ๊พธ๋ก ์ ๊ทผํฉ๋๋ค. ASDF[-1]
์ด ๋ง์ง๋ง ์ธ๋ฑ์ค์
๋๋ค13.
ASDF=(100 200 300)
echo ${ASDF[-1]} # ASDF[2]์ ๊ฐ์
echo ${ASDF[-2]} # ASDF[1]๊ณผ ๊ฐ์
echo ${ASDF[-3]} # ASDF[0]๊ณผ ๊ฐ์
์ถ๋ ฅ ๊ฒฐ๊ณผ:
300
200
100
์์ ์ธ๋ฑ์ค๋ ๊ฐ์ฅ ๋ง์ง๋ง ์ธ๋ฑ์ค๋ถํฐ ๊ฑฐ๊พธ๋ก ์ ๊ทผํ๊ธฐ ๋๋ฌธ์, ๊ฐ์ด ๋ค์ด์์ง ์์ ์ธ๋ฑ์ค๋ ์๋ฌด๋ฐ ๊ฐ๋ ์ถ๋ ฅํ์ง ์์ต๋๋ค.
๋ค์์ ์ธ๋ฑ์ค 9๋ถํฐ ๊ฑฐ๊พธ๋ก ๊ฐ๋ค์ ์ถ๋ ฅํ๋ ์ฝ๋์ ๋๋ค:
ASDF=(100 200 300)
ASDF[9]=1000
echo ${ASDF[-1]} # ASDF[9]์ ๊ฐ์
echo ${ASDF[-2]} # ASDF[8]๊ณผ ๊ฐ์
echo ${ASDF[-3]} # ASDF[7]๊ณผ ๊ฐ์
์ถ๋ ฅ ๊ฒฐ๊ณผ:
1000
๋ณด์๋ ๋ฐ์ ๊ฐ์ด ${ASDF[-2]}
, ${ASDF[-3]}
์ ์๋ฌด ๊ฒ๋ ์ถ๋ ฅ๋์ง ์์ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค.
๋ฐฐ์์์๋ ์ธ๋ฑ์ค ์์ด ๋ฐฐ์ด ์ด๋ฆ๋ง์ผ๋ก ๋ฐฐ์ด์ ์ ๊ทผํ๋ ค ํ๋ฉด ๋ฐฐ์ด์ ์ฒซ ๋ฒ์งธ ๊ฐ์ฒ๋ผ ์ทจ๊ธํฉ๋๋ค14. ASDF=100
์ ASDF[0]=100
์ฒ๋ผ ์ฒ๋ฆฌํ๋ค๋ ์๋ฆฌ์ฃ .
์ ๋ ฅ ์ฝ๋ | ์ฒ๋ฆฌ ์ฝ๋ |
---|---|
ASDF=100 |
ASDF[0]=100 |
echo ${ASDF} |
echo ${ASDF[0]} |
ASDF=100 ASDF[1]=200 |
ASDF[0]=100 ASDF[1]=200 |
๋ฐฐ์ด์ ๊ฐ์ ์์ ํ ๋, ๋ฐฐ์ด์ ๊ฐ์ ์ถ๋ ฅํ ๋ ๋ชจ๋ ์ ์ฉ๋ฉ๋๋ค. ์ฌ์ง์ด๋ ๋ฐฐ์ด์ด ์์ง ์์ฑ๋์ง ์์์ ๋์ ๊ฐ ๋ํ ๋ฐฐ์ด์ ์ฒซ ๋ฒ์งธ ๊ฐ์ฒ๋ผ ์ทจ๊ธํฉ๋๋ค.
declare
๋ช
๋ น์ด์ -a
์ต์
์ ํตํด ํน์ ๋ณ์๋ฅผ ๋ฐฐ์ด๋ก ์ ์ธํ ์ ์์ต๋๋ค. ์ด๋ฅผ ๋ช
์์ ์ ์ธ์ด๋ผ ํฉ๋๋ค. -a
๋ "A"rray์ "A"์์ ๋ฐ์์ต๋๋ค.
declare -a ASDF
# ์ ์ธ๊ณผ ๋์์ ์ด๊ธฐํ๋ ๊ฐ๋ฅ
declare -a QWER=(100 200 300)
Note
๋ช ์์ ์ผ๋ก ๋ฐฐ์ด์ ์ ์ธํ๋ฉด ์ปดํจํฐ๋ก ํ์ฌ๊ธ ํด๋น ๋ณ์๋ฅผ ์ต์ ํํ ์ ์๋ ์ฌ์ง๋ฅผ ์ค๋๋ค. ์ด๋ก ์ธํด ์๋๊ฐ ํฅ์๋ ์๋ ์์ต๋๋ค15.
2009๋ ์ถ์๋ ๋ฐฐ์ 4.0๋ถํฐ ์ฐ๊ด ๋ฐฐ์ด(associative array)์ด๋ผ๋ ์๋ก์ด ๋ฌธ๋ฒ์ด ์ถ๊ฐ๋์์ต๋๋ค16.
๊ธฐ์กด ๋ฐฐ์ด๊ณผ ๋ฌ๋ฆฌ, ์ฐ๊ด ๋ฐฐ์ด์๋ ์ธ๋ฑ์ค๊ฐ ๋ค์ด๊ฐ ์๋ฆฌ์ ๋ฌธ์์ด์ด ๋ค์ด๊ฐ๋๋ค. ์ด ๋ฌธ์์ด์ ๊ฐ๋ฆฌ์ผ ํค๋ผ๊ณ ํฉ๋๋ค.
๊ธฐ์กด์ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ๋ ๋ฐฐ์ด์ ์ฐ๊ด ๋ฐฐ์ด๊ณผ ๊ตฌ๋ถํ ํ์๊ฐ ์์ผ๋ฏ๋ก ๋ฐ๋ก ์ธ๋ฑ์ค ๋ฐฐ์ด(indexed array)์ด๋ผ๊ณ ๋ถ๋ฆ ๋๋ค.
์ฐ๊ด ๋ฐฐ์ด์ ๊ธฐ๋ณธ์ ์ธ ๋์ ๋ฐฉ์์ ์ธ๋ฑ์ค ๋ฐฐ์ด๊ณผ ๋งค์ฐ ์ ์ฌํฉ๋๋ค. ๋ค์์ ์ธ๋ฑ์ค ๋ฐฐ์ด๊ณผ ์ฐ๊ด ๋ฐฐ์ด์์ ์ ๊ณตํ๋ ๊ธฐ๋ฅ์ ๋น๊ตํ๋ ํ์ ๋๋ค:
๋ณ๊ฒฝ | ์ป๊ธฐ | ์ ์ฒด ์ป๊ธฐ | ๋ฐฐ์ด ํฌ๊ธฐ | ์ ๊ฑฐ | |
---|---|---|---|---|---|
์ธ๋ฑ์ค ๋ฐฐ์ด | ASDF[3]=Hello |
${ASDF[3]} |
${ASDF[@]} |
${#ASDF[@]} |
unset ASDF[3] |
์ฐ๊ด ๋ฐฐ์ด | ASDF[greeting]=Hello |
${ASDF[greeting]} |
${ASDF[@]} |
${#ASDF[@]} |
unset ASDF[greeting] |
๋ค๋ง ์ฐ๊ด ๋ฐฐ์ด์ ์ธ๋ฑ์ค ๋ฐฐ์ด๊ณผ๋ ๋ค๋ฅธ ๋ ๊ฐ์ง ์ฐจ์ด์ ์ด ์กด์ฌํฉ๋๋ค:
์ฐ๊ด ๋ฐฐ์ด๊ณผ ์ธ๋ฑ์ค ๋ฐฐ์ด์๋ ํ ๊ฐ์ง ์ค์ํ ์ฐจ์ด์ ์ด ์์ต๋๋ค. ๋ช ์์ ์ ์ธ์ ํด๋ ๋๊ณ ์ ํด๋ ๋๋ ์ธ๋ฑ์ค ๋ฐฐ์ด๊ณผ ๋ฌ๋ฆฌ, ์ฐ๊ด ๋ฐฐ์ด์ ์ฌ์ฉํ๊ธฐ ์ํด์๋ ๋ฐ๋์ ๋ช ์์ ์ผ๋ก ์ ์ธํด์ผ๋ง ํฉ๋๋ค17. ๋ค์๊ณผ ๊ฐ์ด ์ ์ธํฉ๋๋ค:
declare -A ๋ณ์์ด๋ฆ
์ฐ๊ด ๋ฐฐ์ด ์ญ์ ์ธ๋ฐ์ค ๋ฐฐ์ด์ฒ๋ผ ๋ฐฐ์ด ์์ฑ๊ณผ ํจ๊ป ๊ฐ์ ์ถ๊ฐํ ์ ์์ต๋๋ค. ๋ค๋ง ์ธ๋ฑ์ค ๋ฐฐ์ด๊ณผ ๋ฌ๋ฆฌ ํค๋ฅผ ์๋์ผ๋ก ์ง์ ํด์ฃผ์ง ์์ต๋๋ค. ๊ทธ๋ฌ๋ฏ๋ก ๋ค์๊ณผ ๊ฐ์ด ์ธ์ ๋ ํค๋ฅผ ๋ช ์ํด์ผ ํฉ๋๋ค (์์ ์ค๋ช ํ '์ธ๋ฑ์ค ๋ฐฐ์ด์ ์์ฑํ๋ฉด์ ์ธ๋ฑ์ค๋ฅผ ๋ช ์ํ๋ ๋ฐฉ๋ฒ'๊ณผ ๋์ผํ ํํ์ ๋๋ค):
declare -A ๋ณ์์ด๋ฆ=([ํค]=๊ฐ [ํค]=๊ฐ [ํค]=๊ฐ)
ํค๋ฅผ ์ง์ ํ์ง ์์ผ๋ฉด ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค.
๋ค์์ ์ฐ๊ด ๋ฐฐ์ด์ ์์ฑํ๋ฉด์ ํค๋ฅผ ๋ช ์ํ์ง ์๋ ์๋ชป๋ ์ฝ๋์ ๋๋ค:
declare -A ASDF=(123 456 789) # ์๋ชป๋จ!
์ถ๋ ฅ ๊ฒฐ๊ณผ:
-bash: ASDF: 123: must use subscript when assigning associative array
-bash: ASDF: 456: must use subscript when assigning associative array
-bash: ASDF: 789: must use subscript when assigning associative array
์์๋๋ก ์ค๋ฅ๊ฐ ๋ฐ์ํ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค.
์ธ๋ฑ์ค ๋ฐฐ์ด์ ์ธ๋ฑ์ค์ ๋ฌ๋ฆฌ, ์ฐ๊ด ๋ฐฐ์ด์ ํค์๋ ์์๊ฐ ์์ต๋๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ์ ์ฒด ๊ฐ์ ์ป์ ๋์๋ ์ด๋ค ์์๋ก ์ป๊ฒ ๋ ์ง ์ ์ ์์ต๋๋ค.
๋ค์์ ์ฐ๊ด ๋ฐฐ์ด์ ํค์ ์์๊ฐ ์์์ ํ์ธํ๋ ์ฝ๋์ ๋๋ค:
declare -A ASDF=([aaa]=111 [bbb]=222 [ccc]=333 [ddd]=444 [eee]=555)
echo ${ASDF[@]}
์ถ๋ ฅ ๊ฒฐ๊ณผ:
111 555 333 222 444
์ฐ๊ด ๋ฐฐ์ด์ ํค์๋ ์์๊ฐ ์์ผ๋ฏ๋ก ์ถ๋ ฅ ๊ฒฐ๊ณผ๋ ์คํ ํ๊ฒฝ๋ง๋ค ๋ค๋ฅผ ์ ์์ต๋๋ค.
๋ฐฐ์๋ ๊ณต์์ ์ผ๋ก 1์ฐจ์ ๋ฐฐ์ด๋ง์ ์ง์ํฉ๋๋ค18. 2์ฐจ์ ๋ฐฐ์ด์ ์ํ ๋ฌธ๋ฒ์ ์ ๊ณตํ์ง ์์ต๋๋ค.
Arrays - Bash Reference Manual
Arrays are assigned to using compound assignments of the form
โฉname=(value1 value2 โฆ )
Arrays - Bash Reference Manual
โฉIndexing starts at zero.
Arrays - Bash Reference Manual
โฉThe braces are required to avoid conflicts with the shellโs filename expansion operators.
Arrays - Bash Reference Manual
โฉIf the subscript is โ@โ or โโ, the word expands to all members of the array name. These subscripts differ only when the word appears within double quotes. If the word is double-quoted, ${name[]} expands to a single word with the value of each array member separated by the first character of the IFS variable, and ${name[@]} expands each element of name to a separate word. When there are no array members, ${name[@]} expands to nothing.
Arrays - Bash Reference Manual
โฉeach value is of the form
[subscript]=string
.
Arrays - Bash Reference Manual
โฉAn indexed array is created automatically if any variable is assigned to using the syntax
name[subscript]=value
Arrays - Bash Reference Manual
โฉnor any requirement that members be indexed or assigned contiguously.
Arrays - Bash Reference Manual
โฉwhere each value is of the form [subscript]=string. ... if the optional subscript is supplied, that index is assigned to;
Arrays - Bash Reference Manual
โฉ${#name[subscript]} expands to the length of ${name[subscript]}. If subscript is โ@โ or โ*โ, the expansion is the number of elements in the array.
Arrays - Bash Reference Manual
โฉIt is possible to obtain the keys (indices) of an array as well as the values. ${!name[@]} and ${!name[*]} expand to the indices assigned in array variable name. The treatment when in double quotes is similar to the expansion of the special parameters โ@โ and โ*โ within double quotes.
Arrays - Bash Reference Manual
โฉThe unset builtin is used to destroy arrays.
unset name[subscript]
destroys the array element at index subscript. Negative subscripts to indexed arrays are interpreted as described above. Unsetting the last element of an array variable does not unset the variable.unset name
, where name is an array, removes the entire array.
Arrays - Bash Reference Manual
โฉThe null string is a valid value.
Arrays - Bash Reference Manual
โฉWhen assigning to an indexed array, if name is subscripted by a negative number, that number is interpreted as relative to one greater than the maximum index of name, so negative indices count back from the end of the array, and an index of -1 references the last element.
Arrays - Bash Reference Manual
โฉReferencing an array variable without a subscript is equivalent to referencing with a subscript of 0.
Arrays - Advanced Bash-Scripting Guide
โฉAdding a superfluous declare -a statement to an array declaration may speed up execution of subsequent operations on the array.
Bash, version 4 - Advanced Bash-Scripting Guide
โฉChet Ramey announced Version 4 of Bash on the 20th of February, 2009. Among the new goodies:
- Associative arrays.
Arrays - Bash Reference Manual
โฉWhen assigning to an associative array, the subscript is required.
Arrays - Bash Reference Manual
โฉBash provides one-dimensional indexed and associative array variables.