SW/리눅스

Linux : Bash : Array 다루는 방법, 예제, 명령어

얇은생각 2021. 9. 13. 07:30
반응형

어레이는 가장 많이 사용되는 기본 데이터 구조 중 하나입니다. 배열은 배열 내에 여러 변수를 저장할 수 있는 변수라고 생각할 수 있습니다.

Bash 어레이에 대해 살펴보고 Bash 스크립트에서 어레이를 사용하는 방법에 대해 설명합니다.

 

 

Linux : Bash : Array 다루는 방법, 예제, 명령어

 

 

배쉬 어레이

Bash는 1차원 수치 인덱싱 및 연결 어레이 유형을 지원합니다. 숫자 배열은 정수를 사용하여 참조되고 연관성은 문자열을 사용하여 참조됩니다. 

숫자 인덱싱된 어레이는 음수 인덱스를 사용하여 끝에서 액세스할 수 있습니다. -1 색인은 마지막 요소를 참조합니다. 그 지수는 연속적일 필요는 없습니다.

대부분의 프로그래밍 언어와 달리 Bash 어레이 요소는 데이터 유형이 동일할 필요가 없습니다. 문자열과 숫자를 모두 포함하는 배열을 생성할 수 있습니다.

Bash는 다차원 어레이를 지원하지 않으며 어레이 요소도 마찬가지일 수 없습니다.

어레이에 저장할 수 있는 최대 요소 수에는 제한이 없습니다.

 

 

 

Bash 어레이 생성

Bash의 어레이는 다양한 방법으로 초기화할 수 있습니다.

 

 

 

숫자 인덱싱된 어레이 생성

Bash 변수는 입력되지 않으므로 선언하지 않고 모든 변수를 인덱스 어레이로 사용할 수 있습니다.

어레이를 명시적으로 선언하려면 기본 제공 선언을 사용합니다.

declare -a array_name

 

 

 

인덱스 배열을 생성하는 한 가지 방법은 다음 양식을 사용하는 것입니다.

array_name[index_1]=value_1
array_name[index_2]=value_2
array_name[index_n]=value_n

 

 

 

여기서 index_*는 양의 정수입니다.

숫자 배열을 만드는 또 다른 방법은 괄호 안의 요소 목록을 빈 공간으로 구분하여 지정하는 것입니다.

array_name=( element_1 element_2 element_N )

 

 

 

위의 양식을 사용하여 어레이를 생성할 때 인덱싱은 0에서 시작됩니다. 즉, 첫 번째 요소의 인덱스는 0입니다.

 

 

 

연결 어레이 생성

숫자 인덱싱과 달리 연결 어레이를 사용하려면 먼저 해당 어레이를 선언해야 합니다.

연결 어레이를 선언하려면 -A(대문자) 옵션과 함께 기본 제공 선언을 사용합니다.

declare -A array_name

 

 

연결 어레이는 다음 양식을 사용하여 생성할 수 있습니다.

declare -A array_name

array_name[index_foo]=value_foo
array_name[index_bar]=value_bar
array_name[index_xyz]=value_xyz

 

 

여기서 index_*는 임의의 문자열일 수 있습니다.

아래 양식을 사용하여 연결 배열을 생성할 수도 있습니다.

declare -A array_name

array_name=( 
  [index_foo]=value_foo 
  [index_bar]=value_bar 
  [index_xyz]=value_xyz 
)

 

 

 

어레이 작업

Bash 어레이 구문은 처음에는 조금 이상하게 보일 수 있지만, 이 문서를 읽고 나면 더 의미가 있을 것입니다.

 

 

 

참조 요소

단일 요소를 참조하려면 요소 인덱스를 알아야 합니다.

다음 구문을 사용하여 모든 요소를 참조할 수 있습니다.

${array_name[index]}

 

 

어레이 요소에 액세스하는 구문은 대부분의 프로그래밍 언어의 구문과 유사합니다. 셸의 파일 이름 확장 연산자를 방지하려면 중괄호 ${}가 필요합니다.

다음 색인으로 요소를 인쇄하겠습니다.

## declare the array
declare -a my_array=( "Hydrogen" "Helium" "Lithium" "Beryllium" )

## print element
echo ${my_array[1]}

# Helium

 

 

@ 또는 *를 인덱스로 사용하는 경우 단어는 어레이의 모든 멤버로 확장됩니다. 사용할 모든 요소를 출력하려면 다음을 수행합니다.

## declare the array
declare -a my_array=( "Hydrogen" "Helium" "Lithium" "Beryllium" )

## print all elements
echo "${my_array[@]}"

# Hydrogen Helium Lithium Beryllium

 

 

@와 *의 유일한 차이점은 ${my_array[x]} 형식이 큰따옴표로 둘러싸여 있을 때입니다. 이 경우 *는 어레이 요소가 공백으로 구분되는 단일 단어로 확장됩니다. @는 각 어레이 요소를 별도의 단어로 확장합니다. 이는 어레이 요소를 통한 문맹을 위해 양식을 사용할 때 특히 중요합니다.

어레이의 키를 인쇄하려면 어레이 이름 앞에 ! 연산자를 추가합니다.

${!array_name[index]}

 

 

## declare the array
declare -a my_array=( "Hydrogen" "Helium" "Lithium" "Beryllium" )

## print all elements
echo "${!my_array[@]}"

# 0 1 2 3

 

 

 

배열 길이

배열 길이를 가져오려면 다음 양식을 사용하십시오.

${#array_name[@]}

 

 

이 구문은 어레이 이름 앞에 # 문자가 추가된 모든 요소를 참조할 때와 동일합니다.

## declare the array
declare -a my_array=( "Hydrogen" "Helium" "Lithium" "Beryllium" )

## array Length
echo ${#my_array[@]}

# 4

 

 

 

어레이를 루프

어레이의 각 항목에 대해 반복하는 가장 일반적인 방법은 for 루프를 사용하는 것입니다.

declare -a my_array=( "Hydrogen" "Helium" "Lithium" "Beryllium" )

## Array Loop
for i in "${my_array[@]}"
do 
  echo "$i"
done

# Hydrogen
# Helium
# Lithium
# Beryllium

 

 

위의 코드가 어레이에 반복되고 각 요소가 새 줄로 인쇄됩니다.

다음은 모든 키와 값을 인쇄하는 방법의 예입니다.

declare -a my_array=( "Hydrogen" "Helium" "Lithium" "Beryllium" )

## Array Loop
for i in "${!my_array[@]}"
do
  echo "$i" "${my_array[$i]}"
done

# 0 Hydrogen
# 1 Helium
# 2 Lithium
# 3 Beryllium

 

 

어레이를 루프하는 또 다른 방법은 어레이 길이를 가져오고 C 스타일 루프를 사용하는 것입니다.

declare -a my_array=( "Hydrogen" "Helium" "Lithium" "Beryllium" )

# Length of the array
length=${#my_array[@]}

# Array Loop
for (( i=0; i < ${length}; i++ ))
do
  echo $i ${my_array[$i]}
done

# 0 Hydrogen
# 1 Helium
# 2 Lithium
# 3 Beryllium

 

 

 

새 요소를 추가

새 요소를 bash 어레이에 추가하고 인덱스를 지정하려면 다음 양식을 사용합니다.

my_array[index_n]="New Element"

 

 

다음은 예입니다.

declare -a my_array=( "Hydrogen" "Helium" "Lithium" "Beryllium" )

## add new element
my_array[9]="Aluminum"

## print all elements
echo "${my_array[@]}"

# Hydrogen Helium Lithium Beryllium Aluminum

 

 

인덱스를 지정하지 않고 어레이에 새 요소를 추가하는 또 다른 방법은 += 연산자를 사용하는 것입니다. 하나 이상의 요소를 추가할 수 있습니다.

declare -a my_array=( "Hydrogen" "Helium" "Lithium" "Beryllium" )

## add new elements
my_array+=( Cobalt Nickel )

## print all elements
echo "${my_array[@]}"

# Hydrogen Helium Lithium Beryllium Cobalt Nickel

 

 

 

요소를 삭제

단일 요소를 삭제하려면 요소 인덱스를 알아야 합니다. 설정 해제된 명령을 사용하여 요소를 제거할 수 있습니다.

unset my_array[index]

 

 

예를 들어 보겠습니다.

declare -a my_array=( "Hydrogen" "Helium" "Lithium" "Beryllium" )

## remove element
unset my_array[2]

## print all elements
echo "${my_array[@]}"

# Hydrogen Helium Beryllium

 

반응형