"local -n"을 사용할 때 대상 시스템 bash에서 매개변수 오류가 발생합니다. 어떻게 해결할 수 있나요?

"local -n"을 사용할 때 대상 시스템 bash에서 매개변수 오류가 발생합니다. 어떻게 해결할 수 있나요?

clearCntbash 버전의 Linux에서는 제대로 작동 GNU bash, version 4.3.48하지만 Linux 대상 시스템에서는 작동하지 않는 함수가 포함된 스크립트가 있습니다 . 대상 시스템의 bash(버전: GNU bash, version 4.1.2(1) )명령을 허용하지 않습니다 local -n.

다음 코드는 "기본" 스크립트 흐름 내에서 함수를 여러 번 사용하는 스크립트에서 발췌한 것이며 clearCnt, 많은 hh.

#!/bin/bash

# clearCnt(src,dst)    
clearCnt()
{
local i=0
local -n src=$1
local -n dst=$2

while test ${src[$i]} != 'xxx'; do

    let dst[$i]=0
    echo ${src[$i]} ${dst[$i]}

    let i=i+1
done

return
}

hdc=0
hh={
GT5849503583053053
ST5849503583053063
MT6849503583053053
KT5849503583053053
xxx}

clearCnt hh hdc
exit

이 문제를 어떻게 해결할 수 있나요?

답변1

local -n이름 참조 변수가 정의됩니다.

bash대상 시스템의 버전 bash-4.3(이름 참조를 도입한 셸 버전) 이상으로 업데이트하거나 해당 버전의 셸을 시스템의 다른 위치에 설치하고 스크립트에서 대신 사용하도록 하세요 /bin/bash.

또한 이 코드의 모든 변수 확장은 큰따옴표로 묶어야 합니다. 예를 들어,

while test ${src[$i]} != 'xxx'; do

다음과 같이 작성해야 합니다.

while test "${src[$i]}" != 'xxx'; do

또는

while [ "${src[$1]}" != 'xxx' ]; do

관련 정보