Bash 어레이 가이드

게시 됨: 2022-12-30

Bash 배열에 대한 이 가이드에서는 Bash에서 인덱스 및 연관 배열을 선언하고 사용하는 방법을 배웁니다.

Bash에서는 배열을 만들어 요소 모음을 저장할 수 있습니다. Bash 배열은 1차원 컬렉션입니다. C 및 C++와 같은 프로그래밍 언어에서 배열은 동일한 데이터 유형의 요소 모음입니다. 그러나 Bash에서는 사용 사례에 따라 정수와 문자열을 동일한 배열에 저장할 수 있습니다.

이 자습서에서는 Bash 배열을 선언하고 해당 요소에 액세스하는 방법을 배웁니다. 그런 다음 배열의 요소를 반복하고 배열에 요소를 추가하는 방법을 배웁니다. 마지막으로 Bash의 연관 배열에 대해 배웁니다.

의 시작하자!

코딩에 관심이 있으십니까? 전제 조건은 다음과 같습니다.

  • Mac 또는 Linux 시스템을 사용하는 경우 터미널과 코드를 열 수 있습니다.
  • Windows 시스템을 사용 중인 경우 Git Bash 또는 Linux용 Windows 하위 시스템(WSL2)을 설치하십시오.

Bash 배열을 선언하는 방법

이 섹션에서는 Bash 배열 및 코드 예제를 선언하는 구문을 배웁니다.

Bash 배열 선언의 구문

다음 구문을 사용하여 Bash에서 배열을 선언할 수 있습니다.

 $ arrayName=(elt1 elt2 ... eltN) # arrayName is the name of the array # elt1 through eltN are the N elements in the array

위의 구문에서 arrayNameN 개의 요소 elt1...eltN 을 포함하는 배열의 이름을 나타냅니다.

배열의 요소는 여는 괄호와 닫는 괄호 () 사이에 있습니다. 또한 배열의 요소는 공백 으로 구분됩니다. 다른 Bash 변수와 마찬가지로 대입 연산자 = 앞이나 뒤에 공백이 없어야 합니다.

대부분의 다른 프로그래밍 언어에서는 배열 또는 유사한 컬렉션의 요소를 쉼표로 구분합니다. 그러나 Bash에서는 공백이 구분 기호입니다.

Bash에서 요소가 인덱스로 식별되는 배열을 인덱스 배열 이라고 합니다.

Bash에서 인덱스 배열 선언

숫자 배열인 prices 를 만들어 봅시다.

 $ prices=(24 27 18 30 15)

구문에서 언급한 것처럼 prices 배열의 숫자는 괄호로 묶인 공백으로 구분되며 = 대입 연산자 앞뒤에 공백이 없습니다.

Bash에서는 echo 명령을 사용하여 변수 값을 출력할 수 있습니다. $variableName 을 사용하면 variableName 의 값이 출력됩니다. 그러나 배열 이름을 사용하면 첫 번째 요소만 출력되는 것을 볼 수 있습니다.

 $ echo $prices 24

Bash 배열은 제로 인덱싱을 따릅니다. 따라서 첫 번째 요소는 인덱스 0에 있고 두 번째 요소는 인덱스 1에 있습니다. 네거티브 인덱싱을 사용할 수도 있습니다. 마지막 배열 요소의 인덱스는 -1입니다.

특정 인덱스에 있는 요소에 액세스하여 인쇄하려고 하면 어떻게 됩니까? 인덱스 1에 있는 요소를 출력해 봅시다.

 $ echo $prices[1] 24[1]

출력이 24[1]인 이유는 무엇입니까? 이는 Bash가 $prices 를 24로 대체하기 때문입니다. 배열의 첫 번째 요소와 [1]이 그대로 출력됩니다.

특정 색인에서 요소를 인쇄하려면 ${prices[index]} 형식의 매개변수 확장을 사용할 수 있습니다.

 $ echo ${prices[1]} # 27 $ echo ${prices[2]} # 18

배열의 모든 요소를 ​​출력하려면 특정 인덱스 대신 @ 를 지정할 수 있습니다.

 $ echo ${prices[@]} 24 27 18 30 15

다음으로 문자열 배열을 만들어 보겠습니다. 다음 명령을 실행하면 인덱스 배열이 생성됩니다.

 $ declare -a fruits

-a 옵션은 인덱스 배열을 생성합니다. 이제 아래와 같이 특정 인덱스에서 요소를 선언하여 한 번에 한 요소씩 배열을 채울 수 있습니다.

 $ fruits[0]="cherry" $ fruits[1]="berry" $ fruits[2]="apple" $ fruits[3]="pear" $ fruits[4]="melon" $ fruits[5]="orange"

이제 배열의 모든 요소를 ​​출력하려면 ${fruits[@]} 를 사용할 수 있습니다.

 $ echo ${fruits[@]} cherry berry apple pear melon orange

Bash 배열의 요소에 액세스

bash-array-access-elements

다음과 같은 방법으로 배열의 요소에 액세스할 수 있습니다.

  • 배열을 반복하고 요소에 직접 액세스
  • 특정 인덱스에서 인덱스 및 액세스 요소 집합을 통해 루프

배열 및 액세스 요소를 통한 루프

Python으로 코딩했다면 다음 구문을 사용하여 for 루프를 사용했을 것입니다.

 for elt in some_list: print(elt)

이제 위의 for 루프와 동등한 Bash를 작성해 보겠습니다.

우리는 {prices[@]}prices 배열의 모든 요소로 확장된다는 것을 알고 있습니다. 그리고 ${prices[@]} 는 모든 요소의 값을 제공합니다.

Bash for 루프는 Python의 for 루프 구문과 유사하지만 루프 본문의 명령문은 다음과 같이 dodone 안에 포함되어야 합니다.

 $ for price in ${prices[@]} > do > echo $price > done

echo 명령을 사용하고 변수 price 의 값을 출력하기 때문에 다음과 같은 결과를 얻습니다.

 # output 24 27 18 30 15

배열 인덱스를 사용하여 요소에 액세스

배열을 반복하는 또 다른 방법은 요소의 인덱스를 사용하는 것입니다. 이것은 Python의 for 루프 구조가 range() 함수를 사용하는 것과 유사합니다.

 for i in range(len(some_list)): print(i)

반복할 인덱스 목록을 얻으려면 매개변수 확장에서 배열 이름 앞에 느낌표( ! )를 배치할 수 있습니다. 이렇게 하면 다음과 같이 어레이에 대한 모든 유효한 인덱스 목록이 제공됩니다.

 $ echo ${!prices[@]} 0 1 2 3 4

prices 배열에는 5개의 요소가 포함되어 있으므로 인덱스는 0에서 시작하여 최대 4까지 올라갑니다.

다음으로 인덱스 목록을 반복하고 각 인덱스의 요소에 액세스할 수 있습니다. 인덱스 i 의 경우 ${prices[i]} 는 인덱스 i 에 있는 요소입니다.

 $ for i in ${!prices[@]} > do > echo ${prices[i]} > done

위의 루프는 배열의 모든 요소를 ​​출력합니다.

 # output 24 27 18 30 15

여기에서 각 요소에 액세스한 후 해당 값을 출력하는 간단한 작업을 수행합니다. 일반적으로 요소에 대해 유효한 처리를 할 수 있습니다.

Bash 배열에 요소 추가

Bash 어레이 가이드

prices 배열에는 5개의 요소(인덱스 0,1,2,3 및 4)가 있습니다. 인덱스 5에서 배열의 끝에 요소를 추가하려면 다음과 같이 할 수 있습니다.

 $ prices[5]=21

가격 배열 끝에 21이 추가된 것을 볼 수 있습니다.

 $ echo ${prices[@]} 24 27 18 30 15 21

그러나 마지막으로 추가된 요소의 인덱스나 현재 배열에 있는 요소의 수를 기억하지 않고 배열 끝에 추가하는 것이 더 편리합니다.

다음과 같이 arrayName+=(elements(s)) it을 사용하여 하나 이상의 요소를 배열에 추가할 수 있습니다.

 $ prices+=(10)

이제 prices 배열을 인쇄하면 배열 끝에 10이 추가된 것을 볼 수 있습니다.

 $ echo ${prices[@]} 24 27 18 30 15 21 10

다음으로 Bash에서 연관 배열을 선언하는 방법을 알아보겠습니다.

Bash의 연관 배열

키-값 쌍으로 관계를 정의하려는 경우 연관 배열 을 사용할 수 있습니다. 다음 일반 구문을 사용하여 연관 배열을 선언할 수 있습니다. -a 대신 -A 옵션을 사용합니다.

 $ declare -A fruits_prices

키와 해당 값을 지정하여 연관 배열에 요소를 추가할 수 있습니다. 여기에서 과일 이름을 키로, 가격 배열의 숫자를 값으로 추가했습니다.

 $ fruits_prices[cherry]=24 $ fruits_prices[berry]=27 $ fruits_prices[apple]=18 $ fruits_prices[pear]=30 $ fruits_prices[melon]=15 $ fruits_prices[orange]=21

그렇다면 연관 배열의 요소에 어떻게 액세스합니까?

Python 사전에서 해당 키를 사용하여 값을 조회하는 것과 마찬가지로 키를 사용하여 연관 배열의 값에 액세스할 수 있습니다.

 $ echo ${fruits_prices[berry]} # 27

${fruits_prices[@]} 는 값으로 확장되고 ${!fruits_prices[@]} 는 키로 확장됩니다.

 $ echo ${fruits_prices[@]} # Output: 18 27 21 24 30 15 $ echo ${!fruits_prices[@]} # Output: apple berry orange cherry pear melon

참고 : 요소의 순서는 요소를 추가한 순서와 다릅니다. 인덱스 배열과 달리 연관 배열은 정렬된 컬렉션이 아니기 때문입니다. 오히려 그들은 키와 값 사이의 연결에 대해 작업합니다. 따라서 키는 인덱스 배열에 대한 인덱스와 연관 배열에 대한 것입니다.

다음과 같이 연관 배열을 반복하고 키에 액세스할 수도 있습니다.

 $ for key in ${!fruits_prices[@]} > do > echo $key > done
 # Output apple berry orange cherry pear melon

다음 루프는 값에 액세스하는 방법을 보여줍니다.

 $ for value in ${fruits_prices[@]} > do > echo $value > done
 # Output 18 27 21 24 30 15

arrayName[key]=value 를 사용하는 것이 좋지만 다음과 같이 시퀀스로 선언할 수도 있습니다.

 declare -A arrayName arrayName=(key1 value1 key2 value2 ... keyN valueN)

이런 식으로 Bash는 첫 번째 요소를 첫 번째 키로, 두 번째 요소를 첫 번째 값으로 유추합니다.

합산

이제 Bash 배열을 만들고 작업하는 방법을 이해하셨기를 바랍니다. 다음은 학습한 내용에 대한 간단한 검토입니다.

  • arrayName=(elt1 elt2 elt3 ... eltN) 구문을 사용하여 Bash에서 인덱스 배열을 선언하거나 declare -a arrayName 을 실행하고 요소를 배열에 추가할 수 있습니다.
  • 요소에 액세스하려면 ${arrayName[@]} 를 사용하여 반복할 수 있습니다. 또는 ${!arrayName[@]} 매개변수 확장을 사용하여 모든 유효한 인덱스 목록을 가져올 수 있습니다.
  • 마지막으로 Bash에 키-값 쌍을 저장하기 위해 연관 배열을 선언하는 방법도 배웠습니다.

다음으로 Bash의 루프에 대한 자습서를 확인하십시오.