Eu tenho um script que contém uma clearCnt
função que funciona corretamente no meu sistema Linux com bash version GNU bash, version 4.3.48
, mas não funciona corretamente no sistema de destino Linux. O bash ( versão: GNU bash, version 4.1.2(1) )
no sistema de destino não aceita o comando local -n
.
O código a seguir é um extrato do script que deve usar a função clearCnt
mais vezes durante o fluxo de script "principal" e deve usar também muitos arrays diferentes de 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
Como posso resolver esse problema?
local -n
definiria uma variável de referência de nome.Atualize o
bash
no sistema de destino parabash-4.3
ou mais recente (este é o lançamento do shell que introduziu referências de nome) ou instale essa versão do shell em outro lugar no sistema e faça seus scripts usarem isso em vez de/bin/bash
.Observe também que cada expansão de variável única nesse código deve estar entre aspas duplas. Por exemplo,
deve ser escrito
ou como