카테고리 없음

bash array (bash 배열)

code911 2024. 10. 8. 18:51

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번째 원소는 아예 출력되지 않는다.