Bash 3.X动态变量名称替换关联数组

时间:2019-12-06 14:51:30

标签: bash

我们有一些可以在bash 4.2.X上完美运行的代码,我必须向后移植才能在3.X上运行。不幸的是,当然,bash 3不支持我们经常使用的关联数组。

其中一些很容易替换,其中的key:value对可以替换为variable_name:value对,例如

current_value[param1]=value1
current_value[param2]=value2

很容易替换为

currvalp1=value1
currvalp2=value2

但是,我要翻译的下一个AA没有固定数量的元素。一个集群可以有2-5个节点。我的第一次尝试大概是

i=1
for j in $( GET NODE NAMES HERE );do
  node_${i}=${j}
  echo "${node_${i}}"
  ((i++))
done

那给了我错误

line 30: node_1=<nodename>: command not found
line 31: ${node_${i}}: bad substitution

通过将第30行更改为

declare node_${i}=${j}

我消除了第一个错误。但是,我不知道如何克服错误的替换错误,如何引用该节点名称。 对node _ $ {i}的大多数调用将采用以下形式

for i in $(seq 1 ${nodecnt});do
  ssh node_${i} <<-EOF
  ...
done

所以:我可以使用动态变量名来做到这一点吗?还是有更好(且仍然很简单)的方式来处理此问题?

0 个答案:

没有答案