Linux bash 쉘 스크립트 - 함수 배열 변수 전달

Linux bash 쉘 스크립트 - 함수 배열 변수 전달

그래서 일반적으로 함수를 많이 만들고, 함수를 호출할 때 변수명을 직접 정의하고 싶어요. 기본 텍스트, 숫자의 경우 작동합니다. 이것이 제가 수행하는 방법입니다.

function func_get_device_hostname
{
    local _device_hostname=$1
    local device_hostname2="TEST"
    eval $_device_hostname="'$device_hostname2'"
}

function func_display_device_hostname
{
    func_get_device_hostname device_hostname
    echo $device_hostname
}

하지만 이와 같은 배열에 동일한 방법을 사용하면

function func_get_vds_ip
{
    func_get_vds_count vds_count
    local _arr_vds_ip=$1
    arr_vds_ip2=()
    i=1
    while [ $i -le $vds_count ]; do
        local arr_vds_ip2+=($(avahi-browse -rvpc vds._tcp | grep "=;" | cut -d ';' -f8 | sed -n $i' p'))
        i=$(($i+1))
    done
    echo ""
    eval $_arr_vds_ip="'$arr_vds_ip2'"
}

function func_display_vds_ip
{
    func_get_vds_ip arr_vds_ip
    echo -n "VDS IP        "
    for i in "${arr_vds_ip[@]}"
    do
        echo -n "$i"
        echo -n " - "
    done
}

다음 오류가 발생합니다.

line 339: {arr_vds_ip[@]}=192.168.18.82: command not found

339행은 코드의 이 부분을 나타냅니다.

    eval $_arr_vds_ip="'$arr_vds_ip2'"

가장 좋은 접근 방식은 무엇입니까? 내가 잘못된 명령을 사용했나요?

답변1

당신은 사용하고있을 수 있습니다이름 참조(바라보다쉘 매개변수"nameref"를 검색해 보세요.) nameref가 선언되면 지역 변수를 일반 변수처럼 사용하면 해당 내용이 참조된 변수에 반영됩니다.

간단한 경우:

function func_get_device_hostname {
    local -n _device_hostname=$1
    local name=TEST
    _device_hostname=$name
}

시험

$ declare -p foo
bash: declare: foo: not found
$ func_get_device_hostname foo
$ declare -p foo
declare -- foo="TEST"

배열의 경우:

function func_get_vds_ip {
    local -n _arrname=$1
    local count=10 i
    _arrname=()
    for ((i=1; i<=count; i++)); do
        _arrname+=($RANDOM)
    done
}

시험

$ declare -p bar
bash: declare: bar: not found
$ func_get_vds_ip bar
$ declare -p bar
declare -a bar=([0]="23299" [1]="13876" [2]="24702" [3]="17413" [4]="14999" [5]="16309" [6]="25625" [7]="29001" [8]="7117" [9]="23532")

관련 정보