shell에서 Array를 어떻게 사용 할까요?
shell에서 Array를 사용 할 수 있긴 할까요?
기본 sh에서는 딱히 방법이 없습니다.
그러나, 배열처럼 사용할 수는 있지요.
#!/bin/sh
vArray="A,B"
for i in `echo ${vArray} | tr ',' '\n'` ; do
echo ${i}
done
위 결과는 다음과 같이
A
B
로 나옵니다.
"tr"은 문자열 변환, 삭제에 사용하는 명령어인데, 이 명령어를 사용하면 마치 Array에서 가져오는 것처럼 사용할 수는 있으나, direct access는 힘듭니다.
위 프로그램은 vArray 변수를 출력하면서 "," -> "\n"로 변환하여 한 라인씩 처리하기 위함입니다.
기본 shell에서는 안되지만, POSIX 계열인 bash에서는 사용 가능합니다.
#!/bin/bash
declare -a vArray
vArray=("A" "B")
vArraySize=${#vArray[@]}
vNo=0
while [ $vNo -lt $vArraySize ]
do
echo ${vArray[$vNo]}
vNo=`expr $vNo + 1`
done
unset vArray
vArray에서 ""로 값들을 나열하고 있으며, vArray의 size도 구할 수 있습니다. ${#vArray[@]}
sh에서 안 되는 direct access도 가능합니다. ${vArray[$vNo]}
Array 변수 사용은 반드시 괄호를 사용해야 합니다.
그리고, 1차원 배열은 지원합니다.
declare와 unset은 사용하지 않아도 됩니다.
이런 Array를 함수의 인자로도 전달 가능할까요?
#!/bin/bash
vArray1=("A" "B")
vArray2=("C" "D")
#-------------- [print_array function] -----------------
print_array()
{
vArray=("${!1}")
vArraySize=${#vArray[@]}
vNo=0
while [ $vNo -lt $vArraySize ]
do
echo ${vArray[$vNo]}
vNo=`expr $vNo + 1`
done
}
echo "================="
print_array vArray1[@]
print_array vArray2[@]
vArray1=(${vArray1[@]} "a")
unset vArray2[1]
echo "================="
print_array vArray1[@]
print_array vArray2[@]
위의 결과는 다음과 같습니다.
=================
A
B
C
D
=================
A
B
a
C
함수를 호출할 경우에는 함수명 뒤에 vArray[@], 함수 내에서는 ("${!1}")로 표현해야 합니다.
함수 내에서 사용하는 표현이 약간 어렵죠? 그냥 외웁시다.
참고로, 표현 내의 숫자("${!1}")는 몇 번째 인자인지 나타냅니다.
${vArray[@]}은 배열 전체를 의미합니다.
${#vArray[@]}은 배열의 크기를 의미합니다.
위 프로그램에서 배열에 값을 추가하고 삭제하는 표현도 두었습니다.
배열에 값을 추가하는 것은 vArray=(${vArray[@]} "a")
배열에 값을 삭제하는 것은 unset vArray[1]
쉘에서도 배열을 자유자재로 사용한다면 프로그래밍이 쉬워지지 않을까요?
'IT > shell 위 댄스' 카테고리의 다른 글
쉘에서 정렬(sort)하고 유니크(uniq)한 내용 추출 (0) | 2017.04.05 |
---|---|
쉘에서 문자열 치환하기 (0) | 2017.04.05 |
디렉토리에서 확장자가 없는 파일 찾기(find, ${#변수명}, ${변수명:n:m}) (0) | 2008.10.07 |
배열 활용 (0) | 2008.02.27 |
파일 처리 (0) | 2008.02.27 |