bash에서도 배열을 활용할 수 있는데, 일반 프로그래밍 언어와 비슷하게 인덱스-값 구조를 취한다.
예시를 보면 아래와 같다.
우선 배열은 아래와 같이 선언할 수 있다. 소괄호로 묶고, 띄어 쓰기로 구분한다.
wj@wj-H410M-DS2V:~/script$ cars=("hyundai" "kia" "bmw")
배열을 출력하고자 $cars를 입력하면, 아래와 같이 첫번째 요소가 출력된다.
wj@wj-H410M-DS2V:~/script$ echo $cars
hyundai
전체를 출력하고 싶다면, 아래와 같이[@]를 붙이면 된다.
wj@wj-H410M-DS2V:~/script$ echo ${cars[@]}
hyundai kia bmw
배열의 길이를 알고 싶다면, #을 이용한다.
wj@wj-H410M-DS2V:~/script$ echo ${#cars[@]}
3
0번째 원소에 접근하고 싶다면, 인덱스를 대괄호 안에 쓴다.
wj@wj-H410M-DS2V:~/script$ echo ${cars[0]}
hyundai
원소를 추가하려면, += 을 이용한다.
wj@wj-H410M-DS2V:~/script$ cars+=("mercedes")
wj@wj-H410M-DS2V:~/script$ echo ${cars[@]}
hyundai kia bmw mercedes
for문을 적용해보자. 아래의 코드에 1:2 의 숫자가 들어가는데, 1은 첫번째 원소라는 뜻이고, 2는 두개의 값을 쓴다는 뜻이다.
wj@wj-H410M-DS2V:~/script$ for element in "${cars[@]:1:2}"
> do
> echo "I love $element"
> done
I love kia
I love bmw
결과적으로 1번째 원소부터 2번째 원소까지 출력된다.
특정 원소를 삭제하기 위해서는 unset을 활용한다.
wj@wj-H410M-DS2V:~/script$ unset cars[2]
wj@wj-H410M-DS2V:~/script$ echo ${cars[@]}
hyundai kia mercedes
2번째 원소가 사라진 것을 알 수 있다.
단, 여기서 2번째 원소의 값이 사라졌지만, mercedes가 3번째 원소에서 2번째 원소로 앞당겨진 것은 아니다.
wj@wj-H410M-DS2V:~/script$ echo ${cars[2]}
wj@wj-H410M-DS2V:~/script$ echo ${cars[3]}
mercedes
2번째 원소는 아예 출력되지 않는다.