bash script2023. 8. 29. 08:54

 

반달가면 이글루에서 백업 - http://bahndal.egloos.com/609856

간혹 실수하는 부분이 있어서 정리해 두기로.

리눅스 bash 스크립트에서의 정수 계산은 이전 게시물을 참고하자. 여기로

 

리눅스 bash 스크립트에서의 배열(array) 활용은 여기로, 연관 배열(associative array) 활용은 여기로.

 

bash에서 기본적인 정수 계산은 이중 괄호를 사용한다.

# 정수 계산 예시
x=3
y=5
echo $((x+y))
8

배열(array)이라고 특별히 달라질 것은 없어 보인다.

# 배열에 저장된 정수 계산 예시
a[0]=3
a[1]=5
echo $((a[0]+a[1]))
8

# 배열 인덱스에 변수 사용
a[0]=3
a[1]=5
x=0
y=1
echo $((a[x]+a[y]))
8
echo $((a[$x]+a[$y]))
8

개인적으로 실수하는 경우가 주로 언제냐 하면, 연관 배열(associate array)에서 인덱스(index)를 변수로 지정할 경우다. 아래의 예시를 보자.

# 연관 배열
declare -A aa
aa[abc]=3
aa[def]=5
x=abc
y=def
# 잘못된 결과
echo $((aa[x]+aa[y]))
0
# 제대로 된 결과
echo $((aa[$x]+aa[$y]))
8

연관 배열은 인덱스가 문자열이 되므로, 이중괄호 안에서 인덱스를 지정할 때 변수를 사용하려면 문자열이 아니라 변수임을 명시적으로 표시해서 모호성이 없어야 한다. 즉, 위의 예시에서 변수 x에 "abc"를 할당하고, 이를 이용해서 aa[abc]를 이용하려면 반드시 aa[$x] 이런식으로 사용해야 함에 유의하자.

이런 문제 때문에 배열의 인덱스를 변수로 지정할 때는 일반 배열이냐 연관 배열이냐를 따지지 말고 모호성이 없더라도 무조건 "$" 표시를 붙여 주는 것이 좋겠다.

 

728x90
Posted by 반달가면