3. OS이야기/03. Shell Script

[UNIX/LINUX] Shell Script 기본 - 2.기본 문법 (3) 배열

알 수 없는 사용자 2014. 4. 24. 08:43

(3) 배열

 

배열을 선언하여 값을 할당하는 방법에는 크게 두 가지 정도가 있습니다.

 

하나는 배열의 인덱스 하나하나를 구분하여 각각의 인덱스에 일일이 값을 지정하는 방법과, 또 다른 하나는 뭉탱이로 배열에 값을 넣어주는 방법입니다.

 

먼저 인덱스 하나하나에 값을 따로따로 지정하는 방법은 다음과 같습니다.


array[0]='Shell'

array[1]='Script'

array[2]='Programming'



위 예제의 경우, 인덱스 '0'에는 'Shell'이란 문자열이, 인덱스 '1'에는 'Script'란 문자열이, 인덱스 '2'에는 'Programming'이란 문자열이 각각 지정되었습니다.

 

위와 같이 지정한 후, 다른 라인에서 해당 배열 변수값을 호출하고자 할 때는 아래와 같이 사용하면 됩니다.


echo ${array[0]}

echo ${array[1]}



버퍼에 있는 변수값을 호출하려 할 때, '$'를 붙여서 사용하면 된다는 것은 앞의 글에서 이미 설명 드렸었습니다.

 

헌데, 위 예시에는 그동안 사용하지 않았던 '{ }'(중괄호)가 들어가 있죠?

 

왜일까요?

 

다음과 같은 아주 간단한 스크립트가 있습니다.


 #!/bin/sh  

array[0]='Shell'
array[1]='Script'

 

echo $array[0] $array[1]

echo ${array[0]} ${array[1]}



위 스크립트를 실행시키면 첫 번째 echo 문의 결과값은 'Shell[0] Shell[1]' 이라고 출력되고, 두 번째 echo 문의 결과값은 'Shell Script'라고 출력됩니다.

 

이유인즉슨, '{ }'(중괄호)를 사용하여 array[0], array[1] 등을 하나의 변수로 처리해 주지 않으면, [0], [1] 등을 인식하지 못하고 해당 배열의 첫 번째 인덱스값만 불러오게 되어 있기 때문입니다.

 

꼭 배열을 사용할 때 뿐만 아니라, 많은 경우에서 '{ }'(중괄호)를 필요로 하게 됩니다.

 

'이것은 변수다'라는 것을 명시적으로 표기하여 소스의 가독성을 높이고자 한다면, 변수 호출 시마다 '{ }'(중괄호)를 붙여주는 것이 좋습니다.

 

다음은 뭉탱이로 배열에 값을 할당하여 주는 방법입니다.

 

뭉탱이로 배열에 값을 할당하는 방법도 몇 가지가 있는데, 그 중 사용이 쉽고 자주 쓰이는 두 가지 방식만 살펴보도록 하겠습니다.

 

첫 번째 방식은 다음과 같습니다.


array=(shell script programming)



일일이 값을 할당하는 방식에 비해 훨씬 간결하죠?

 

배열의 인덱스마다 일일이 값을 할당하나, 괄호를 사용하여 한 번에 할당하나 변수 호출의 결과는 같습니다.

 

또 다른 뭉탱이 할당 방식은 파일을 읽어들이는 것입니다.

 

다음 예제를 보시죠.


# cat test.txt

shell script programming

 

array=$(cat test.txt)

echo ${array[0]}



위와 같이 'shell script programming' 이라는 문자열을 담고 있는 파일이 있다면, shell 커맨드인 'cat' 을 이용하여 값을 불러와 배열에 할당할 수 있습니다.

 

Shell Script를 짜다 보면 여러 파일에서 값을 불러와 배열에 저장하고 사용하는 경우가 종종 생기는 데 그 때 위 예제처럼 사용하면 됩니다.

 

그리고 이전에도 한 번 강조했던 내용이지만, 배열 변수에 값을 할당할 때도 '='(equal) 앞뒤로 절대 공백이 존재하면 안된다는 것을 명심하시기 바랍니다.