Bash에서 배열 반환

Olorunfemi Akinlua 2023년6월20일
  1. 명령 대체
  2. 명령 대체를 사용하여 Bash에서 배열 반환
  3. IFS를 사용하여 Bash에서 배열 반환
Bash에서 배열 반환

Bash는 배열을 처리하지 않기 때문에 배열을 반환하는 것이 약간 어려울 수 있습니다. 그러나 함수에서 배열을 반환하기 위해 전역 변수 또는 명령 대체 해결 방법을 활용하여 이 제한 사항을 극복할 수 있습니다.

이 기사에서는 전역 변수 없이 bash에서 배열을 반환하는 방법인 명령 대체를 다룰 것입니다.

명령 대체

이것이 어떻게 작동하는지 이해하려면 먼저 명령 대체가 무엇이며 Bash에서 어떻게 작동하는지 이해해야 합니다.

명령 대체라는 Bash 기능을 사용하면 명령 자체 대신 명령 출력을 사용할 수 있습니다. 다음과 같이 백틱(``) 또는 $() 쌍으로 명령을 둘러싸면 됩니다.

echo "The current date is: `date`"

출력:

The current date is: Fri Nov 29 16:14:23 PST 2022

date 명령은 위의 예에서 실행되며 명령 자체 대신 출력이 대체됩니다. 이를 통해 명령의 출력을 문자열에 직접 포함할 수 있으며 이는 많은 상황에서 유용할 수 있습니다.

명령 대체를 사용하여 Bash에서 배열 반환

이제 명령 대체를 사용하여 Bash의 함수에서 배열을 반환하는 방법을 살펴보겠습니다.

먼저 1에서 10까지의 숫자 배열을 반환하고 명령 대체를 사용하는 get_array라는 함수를 만들어 보겠습니다. 그런 다음 함수를 호출하고 출력을 변수(result)에 저장하여 인쇄합니다.

function get_array() {
  local my_array=(1 2 3 4 5 6 7 8 9 10)

  echo "${my_array[@]}"
}

result=$(get_array)

echo "The result is: $result"

출력:

The result is: 1 2 3 4 5 6 7 8 9 10

위의 함수에서 1에서 10까지의 숫자를 포함하는 my_array라는 배열을 만듭니다. 그런 다음 echo를 사용하여 배열을 인쇄하고 배열 요소가 단일 문자열로 보존되도록 따옴표로 묶습니다. 그런 다음 get_array 함수를 호출하고 그 출력을 result 변수에 저장합니다. 그런 다음 1에서 10까지의 숫자 배열이어야 하는 result 변수의 내용을 인쇄합니다.

IFS를 사용하여 Bash에서 배열 반환

이제 배열의 요소를 가져오는 방법을 살펴보겠습니다. 배열 요소는 단일 문자열로 반환되므로 IFS(Internal Field Separator) 변수를 사용하여 문자열을 개별 요소로 분할해야 합니다.

IFS 변수는 bash가 문자열을 단어 또는 토큰으로 분할하는 방법을 제어합니다. 기본적으로 IFSspace, tabnewline으로 설정되며, 이는 bash가 이러한 문자에서 문자열을 단어로 분할함을 의미합니다.

get_array 함수에서 반환된 문자열을 개별 요소로 분할하려면 IFS를 공백 문자로 설정해야 합니다.

IFS=' '

result=$(get_array)

result_array=($result)

for i in "${!result_array[@]}"; do
echo "Element $i: ${result_array[$i]}"
done

출력:

Element 0: 1
Element 1: 2
Element 2: 3
Element 3: 4
Element 4: 5
Element 5: 6
Element 6: 7
Element 7: 8
Element 8: 9
Element 9: 10

위의 코드에서 IFS를 공백 문자로 설정하여 get_array 함수에서 반환된 문자열을 개별 요소로 분할할 수 있습니다. 그런 다음 결과를 result_array 변수에 저장하고 for 루프를 사용하여 배열의 요소를 인쇄합니다.

이제 이 메서드가 숫자 배열이 아닌 문자열 배열을 반환하는 방법을 살펴보겠습니다.

먼저 get_array 함수를 수정하여 문자열 배열을 반환합니다.

function get_array() {
  local my_array=("one" "two" "three" "four" "five" "six" "seven" "eight" "nine" "ten")

  # Return the array using the command substitution
  echo "${my_array[@]}"
}

위의 함수에서 문자열 one에서 ten을 포함하는 my_array라는 배열을 만듭니다. 그런 다음 echo를 사용하여 배열을 인쇄하고 배열 요소가 단일 문자열로 보존되도록 따옴표로 묶습니다.

이제 get_array 함수를 활용하여 문자열 배열을 반환하는 방법을 살펴보겠습니다.

IFS=' '

result=$(get_array)

result_array=($result)

for i in "${!result_array[@]}"; do
  echo "Element $i: ${result_array[$i]}"
done

출력:

Element 0: one
Element 1: two
Element 2: three
Element 3: four
Element 4: five
Element 5: six
Element 6: seven
Element 7: eight
Element 8: nine
Element 9: ten

위의 코드에서 get_array 함수를 호출하고 그 출력을 result 변수에 저장합니다. 그런 다음 문자열을 개별 요소로 분할하고 result_array 변수에 저장합니다.

마지막으로 for 루프를 사용하여 배열의 요소를 인쇄합니다.

결론적으로 bash는 배열을 지원하지 않기 때문에 bash에서 배열을 반환하는 것은 까다로울 수 있습니다. 그러나 명령 대체라는 방법을 사용하여 기능을 가질 수 있습니다.

여기에는 배열을 따옴표로 묶고 echo를 사용하여 인쇄한 다음 IFS 변수를 사용하여 결과 문자열을 개별 요소로 분할하는 작업이 포함됩니다.

Olorunfemi Akinlua avatar Olorunfemi Akinlua avatar

Olorunfemi is a lover of technology and computers. In addition, I write technology and coding content for developers and hobbyists. When not working, I learn to design, among other things.

LinkedIn

관련 문장 - Bash Array