我有一个脚本,其中包含一个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