사용자 정의 함수의 로컬 배열로 Bash 배열 선언

사용자 정의 함수의 로컬 배열로 Bash 배열 선언

사용자 정의 함수에서 bash 배열을 로컬 배열로 선언할 수 있나요? Bash 배열에 항상 전역 범위가 있는지 확인하세요.

답변1

예, 배열은 함수의 로컬 배열일 수 있습니다. 함수 내부에 local키워드를 사용하여 선언하세요 . 다음은 예제 스크립트입니다:

#!/usr/bin/env bash

global_ary=( one two )

function my_func () {
  local local_ary=( three four )
  echo "In my_func function:"
  echo "global_ary: ${global_ary[@]}"
  echo "local_ary: ${local_ary[@]}"
  echo
}

echo "In main script:"
echo "global_ary: ${global_ary[@]}"
echo "local_ary: ${local_ary[@]}"
echo

my_func

echo "In main script again:"
echo "global_ary: ${global_ary[@]}"
echo "local_ary: ${local_ary[@]}"
echo

위 스크립트는 전역 배열과 함수를 로컬 배열로 채웁니다. 함수를 호출하기 전, 호출하는 동안, 호출한 후에 두 배열의 내용을 인쇄합니다. 출력은 다음과 같습니다.

In main script:
global_ary: one two
local_ary:

In my_func function:
global_ary: one two
local_ary: three four

In main script again:
global_ary: one two
local_ary:

예상한 대로 전역 배열은 기본 스크립트와 함수에서 사용할 수 있습니다. 로컬 배열은 함수 내에서만 사용할 수 있으므로 echo "local_ary: ${local_ary[@]}"함수만 해당 내용을 표시합니다.

실험적으로 local키워드를 로 변경 declare하거나 제거할 수 있습니다(행을 로 유지 local_ary=( three four )). 이로 인해 local_ary변수가 로컬 변수가 아닌 전역 변수로 생성됩니다.

답변2

#!/usr/bin/env bash

fun ()
{
    local a=( 1 2 3 )
    echo local "${a[@]}"
}

fun

echo global "${a[@]}" # empty

관련 정보