Bash中数组的双插值
我正在尝试制作一个脚本,这样我就可以轻松地向其中添加主机类型,而无需更改代码本身。每种类型的主机都有一组特定的id和与其关联的模板。以下是我得出的cod:Bash中数组的双插值,bash,Bash,我正在尝试制作一个脚本,这样我就可以轻松地向其中添加主机类型,而无需更改代码本身。每种类型的主机都有一组特定的id和与其关联的模板。以下是我得出的cod: CLASS="memcache" memcache_template=( 42 45 ) CLASS_template=${CLASS}_template template=$( eval echo $`echo $CLASS_template` ) for i in ${template[@]}; do echo $i done
CLASS="memcache"
memcache_template=( 42 45 )
CLASS_template=${CLASS}_template
template=$( eval echo $`echo $CLASS_template` )
for i in ${template[@]}; do
echo $i
done
我得到的输出仅仅是“42”。我需要它同时输出42和45。这里有一种方法:
CLASS="memcache"
memcache_template=(42 45)
CLASS_template=${CLASS}_template[@]
for i in ${!CLASS_template}; do
echo $i
done
请参阅
info”(bash)Shell参数扩展“
中有关变量间接寻址的讨论。请注意,您不能使用${!CLASS_template[@]}
,因为这有一个特殊的含义。数组订阅必须在间接寻址之前完成。Neat!另外,您可以使用template=(“${!CLASS\u template}”)
将memcache\u template的内容放入一个新数组(与问题中的代码更相似)。我只是简单地定义了template=(“${CLASS}\u template[@]”)
。