我在 shell 脚本中有以下数组:
#! usr/bin/bash
schemaPrefix=("aos")
tables_aos=("A" "B" "C")
colnames_aos=("id" "id" "id")
for j in "${!schemaPrefix[@]}"; do
aschema=${schemaPrefix[j]}
schema=$aschema
eval tables=tables_$aschema
echo ${tables[@]}
done
此代码应显示:
A B C
但是,它显示:
tables_aos
我做错了什么?谢谢。
答案1
在 bash 版本 > 4.3 中,你可以将tables
变量声明为名称引用:
#! /usr/bin/bash
schemaPrefix=("aos")
tables_aos=("A" "B" "C")
declare -n tables
for j in "${!schemaPrefix[@]}"; do
aschema=${schemaPrefix[j]}
tables=tables_$aschema
echo "${tables[@]}"
done
循环可以更简单地编写,而无需间接
for aschema in "${schemaPrefix[@]}"; do
tables=tables_$aschema
echo "${tables[@]}"
done