如何使用变量在BASH中的数组中创建元素?

时间:2014-09-26 19:26:07

标签: arrays bash

我知道在bash中:

declare array=(hei{1,2}_{1,2})

将创建一个包含元素列表的数组:

echo ${array[*]}
hei1_1 hei1_2 hei2_1 hei2_2

但我也想在数组声明中使用变量:

var=1,2
declare array=(hei{$var}_{$var})

但它不起作用:

echo ${array[*]}
hei{1,2}_{1,2}

请帮忙。我发现在代码中指定像hei {1,2} _ {a,b,c} .. n次...... {hei,hei}这样的东西非常令人沮丧。

提前致谢

注意:zsh中没有eval(从stackexchange.com获得): 例如,这个脚本会做我需要的,但在zsh(我不能总是使用):

#!/usr/bin/zsh
var1=( a c  )
var2=( 1 2  )
arr=($^var1$^var2)
printf "${arr[*]}"

2 个答案:

答案 0 :(得分:3)

除非你也使用eval,否则Brace扩展不能与变量一起使用,因为在参数扩展之前支撑扩展

因此,安全方法(无评估)根本不使用支撑扩展:

var=1,2
IFS=, read -r -a var_values <<<"$var"
result=( )
for val1 in "${var_values[@]}"; do
  for val2 in "${var_values[@]}"; do
    result+=( "hei${val1}_${val2}" )
  done
done

不安全的方法是这样的:

var=1,2
eval "array=( hei{$var}_{$var} )"
除非您信任您的输入,否则

不要遵循后一种做法。

答案 1 :(得分:0)

可以尝试这样的事情......

var=1,2
declare -a array

IFS=','
for item in ${var}; do
array[${#array[@]}]="$item";
done