Bash의 배열

Bash 스크립팅 입문

Alex Scriven

Data Scientist

배열이란?

Bash의 배열 유형 두 가지:

  • 배열
    • 일반적인 숫자 인덱스 구조
    • Python의 list, R의 vector에 해당

Python: my_list = [1,3,2,4]

R: my_vector <- c(1,3,2,4)

Bash 스크립팅 입문

Bash에서 배열 생성

숫자 인덱스 배열 생성은 Bash에서 두 가지 방법이 있습니다.

  1. 요소 없이 선언
declare -a my_first_array
  1. 생성과 동시에 요소 추가
my_first_array=(1 2 3)

기억하세요: 등호 주변에 공백이 없어야 합니다!

Bash 스크립팅 입문

쉼표에 주의!

Bash에서는 쉼표로 배열 요소를 구분하지 않습니다.

다음은 잘못된 예:

my_first_array=(1, 2, 3)

다음이 올바른 예:

my_first_array=(1 2 3)
Bash 스크립팅 입문

중요한 배열 속성

  • array[@]로 모든 요소를 반환할 수 있습니다. 이때, 이러한 속성에 접근하려면 배열 이름을 중괄호로 감싸야 합니다.
my_array=(1 3 5 2)
echo ${my_array[@]}
1 3 5 2
  • 배열 길이는 #array[@]로 구합니다.
echo ${#my_array[@]}
4
Bash 스크립팅 입문

배열 요소 조작

대괄호로 배열 요소를 접근합니다.

my_first_array=(15 20 300 42)
echo ${my_first_array[2]}
300
  • 참고: Bash 배열은 Python처럼 0부터 시작합니다(R와 다름).
Bash 스크립팅 입문

배열 요소 조작

인덱스 표기법으로 배열 요소를 설정합니다.

my_first_array=(15 20 300 42 23 2 4 33 54 67 66)

my_first_array[0]=999
echo ${my_first_array[0]}
999
  • 주의: $my_first_array[0]=999처럼 인덱스를 덮어쓸 때 $를 쓰면 안 됩니다. 동작하지 않습니다.
Bash 스크립팅 입문

배열 요소 조작

array[@]:N:M 표기법으로 배열의 일부를 슬라이스합니다.

  • 여기서 N은 시작 인덱스, M은 반환할 개수입니다.
my_first_array=(15 20 300 42 23 2 4 33 54 67 66)
echo ${my_first_array[@]:3:2}
42 23
Bash 스크립팅 입문

배열에 추가하기

array+=(elements)로 배열에 추가합니다.

예:

my_array=(300 42 23 2 4 33 54 67 66)

my_array+=(10) echo ${my_array[@]}
300 42 23 2 4 33 54 67 66 10
Bash 스크립팅 입문

배열에 (제대로) 추가하지 않기

괄호 없이 추가하면 어떻게 될까요? 확인해 봅시다.

예:

my_array=(300 42 23 2 4 33 54 67 66)
my_array+=10
echo ${my_array[@]}
30010 42 23 2 4 33 54 67 66

문자열 10이 첫 요소에 이어붙습니다. 원하는 동작이 아닙니다!

Bash 스크립팅 입문

연관 배열

  • 연관 배열
    • 일반 배열과 비슷하지만, 숫자 인덱스 대신 키-값 쌍을 가집니다.
    • Python의 dictionary, R의 list와 유사합니다.
    • 참고: Bash 4 이상에서만 지원됩니다. 일부 최신 Mac에 구버전 Bash가 있습니다! 터미널에서 bash --version으로 확인하세요.

Python 예:

my_dict = {'city_name': "New York", 'population': 14000000}

R 예:

my_list = list(city_name = c('New York'), population = c(14000000))
Bash 스크립팅 입문

연관 배열 생성

연관 배열은 declare 문법(대문자 -A)으로만 생성할 수 있습니다.

먼저 선언 후 요소를 추가하거나, 한 줄로 모두 할 수 있습니다.

  • '키'는 대괄호로 감싸고, 등호 뒤에 값을 지정합니다.
    • 여러 요소를 한 번에 추가할 수 있습니다.
Bash 스크립팅 입문

연관 배열 예시

연관 배열을 만들어 봅시다:

declare -A city_details # 먼저 선언

city_details=([city_name]="New York" [population]=14000000) # 요소 추가
echo ${city_details[city_name]} # 키로 인덱싱하여 값 반환
New York
Bash 스크립팅 입문

연관 배열 생성

또는, 한 줄로 연관 배열 생성과 할당을 합니다.

  • 나머지는 동일합니다.
declare -A city_details=([city_name]="New York" [population]=14000000)

연관 배열의 '키'는 !로 접근합니다.

echo ${!city_details[@]} # 모든 키 반환
city_name population
Bash 스크립팅 입문

Ayo berlatih!

Bash 스크립팅 입문

Preparing Video For Download...