我想使用Shell脚本针对不同体系结构交叉编译一组lib。
一组库:
Intent shareIntent = ShareCompat.IntentBuilder.from(this)
.setText("your Text")
.setType("text/plain")
.getIntent()
.setPackage("com.google.android.apps.plus");
startActivityForResult(shareIntent, GOOGLE_REQUEST_SHARE);
每个lib专用的内核数组(为此库进行交叉编译。)
LIBS=(FOO ZOO)
基本上,我希望看到这种情况:
FOO_CORES=(ARM_CM3 ARM_CM4 ARM_CR4)
ZOO_CORES=(ARM_CR4)
我可以运行一个for循环,该循环可以遍历库数组。但是,如何引用每个特定于库的内核数组?我可以使用double-substitution来获取每个特定于库的核心名称变量...就是这样!不确定双重替换是否也适用于数组。
make FOO CORE=ARM_CM3
make FOO CORE=ARM_CM4
make FOO CORE=ARM_CR4
make ZOO CORE=ARM_CR4
输出:
for lib in ${LIBS[@]};do
eval "lib_name=${lib}_CORES"
cores_list=${!lib_name}
echo $lib_name $cores_list
done
答案 0 :(得分:3)
如果您具有Bash 4.3或更高版本,则可以使用namerefs:
for lib in "${LIBS[@]}"; do
declare -n list=${lib}_CORES
for core in "${list[@]}"; do
make "$lib" "$core"
done
done
关键是declare -n
行:list
的行为就像是为其分配了名称的参数一样。
答案 1 :(得分:1)
出于间接参数扩展的目的,参数“名称”由数组名称和所需索引组成。
for lib in "${LIBS[@]}"; do
a=${lib}_CORES
t="$a[@]"
printf '%s\n' "$a"
printf ' %s\n' "${!t}"
done
产生
FOO_CORES
ARM_CM3
ARM_CM4
ARM_CR4
ZOO_CORES
ARM_CR4