Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash中数组的双插值_Bash - Fatal编程技术网

Bash中数组的双插值

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

我正在尝试制作一个脚本,这样我就可以轻松地向其中添加主机类型,而无需更改代码本身。每种类型的主机都有一组特定的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
我得到的输出仅仅是“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[@]”)