当我使用“local -n”时,目标系统 bash 给我参数错误。我该如何解决?

当我使用“local -n”时,目标系统 bash 给我参数错误。我该如何解决?

我有一个脚本,其中包含一个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或更新版本(这是引入名称引用的 shell 版本),或者在系统上的其他位置安装该版本的 shell 并让您的脚本使用它而不是/bin/bash.

另请注意,该代码中的每个变量扩展都必须用双引号引起来。例如,

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

应该写成

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

或作为

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

相关内容