사용자 정의 함수에서 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