我知道在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[*]}"
答案 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