clearCnt
bash 버전의 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