Bash Arrays
Examples
선언
numbers=("one" "two" "three" "four")
또는 다음과 같이 해도 된다.
numbers=(one two three four)
- 이 형식으로 배열을 선언할 수 있다.
=
좌우에 공백이 없어야 한다는 점에 주의할 것.
출력
$ echo $numbers
one
- 주의: 그냥
$numbers
로 출력하면 배열의 첫 번째 요소만 출력된다.
인덱스
$ echo ${numbers[0]}
one
$ echo ${numbers[1]}
two
$ echo ${numbers[2]}
three
$ echo ${numbers[3]}
four
$ echo ${numbers[8]}
- 0 base index를 사용해 위와 같이 출력할 수 있다.
- index가 알맞지 않으면 공백만 출력.
음수 인덱스
$ echo ${numbers[-1]}
four
$ echo ${numbers[-2]}
three
$ echo ${numbers[-3]}
two
$ echo ${numbers[-4]}
one
$ echo ${numbers[-5]}
-bash: numbers: bad array subscript
- 음수 index를 사용할 수도 있다.
- index가 알맞지 않으면 에러가 발생한다.
전체 출력
$ echo ${numbers[@]}
one two three four
@
를 사용하면 배열 전체를 출력할 수 있다.
$ numbers+=("five" "six")
$ echo ${numbers[@]}
one two three four five six
길이
$ echo ${#numbers[@]}
6
아이템 추가
+=
를 사용해 배열에 아이템을 추가하는 것도 가능하다.
$ numbers[0]="하나"
$ numbers[2]="셋"
$ echo ${numbers[@]}
하나 two 셋 four five six
아이템 수정
=
를 사용해 배열의 아이템을 수정할 수도 있다.
$ for num in "${numbers[@]}"
> do
> echo $num
> done
하나
two
셋
four
five
six
순회
- 간단하게 [[/cmd/for]]{for}를 사용해 배열을 순회할 수 있다.
$ for num in "${numbers[@]}"; do echo $num; done
하나
two
셋
four
five
six
- 물론 위와 같이 한 줄로 써도 된다.
$ for num in "${numbers[*]}"; do echo $num; done
하나 two 셋 four five six
- 그러나
@
대신*
를 사용하면 배열을 순회하는 것이 아니라 배열 전체를 하나의 문자열로 출력하므로 주의할 것.
슬라이스
$ echo ${numbers[@]:3:1} # 3번 인덱스부터 1개 출력
four
$ echo ${numbers[@]:3:2} # 3번 인덱스부터 2개 출력
four five
:
를 사용해 배열을 슬라이스할 수 있다.${배열[@]:시작인덱스:길이}
형식으로 사용하므로 주의할 것.
$ next_numbers=("${numbers[@]:3:2}")
$ echo ${next_numbers[@]}
four five
=( ... )
를 사용해 슬라이스한 배열을 새로운 배열로 선언할 수 있다.
삭제
unset numbers
unset
을 사용해 배열을 삭제할 수 있다.
unset numbers[2]
unset
으로 배열의 특정 인덱스를 삭제하는 것도 가능하다.
$ numbers=(one two three four)
$ # 주의: 출력할 때처럼 하면 인덱스는 삭제되지 않는다
$ unset ${numbers[2]}
$ echo ${numbers[@]} # 삭제되지 않았음을 확인
one two three four
$ # 이렇게 해야 삭제된다
$ unset numbers[2]
$ echo ${numbers[@]} # 삭제되었음을 확인
one two four