[英]How to double substitute an array variable in bash
我想使用shell腳本針對不同體系結構交叉編譯一組lib。
一系列庫:
LIBS=(FOO ZOO)
特定於每個庫的內核數組(為此庫進行交叉編譯。)
FOO_CORES=(ARM_CM3 ARM_CM4 ARM_CR4)
ZOO_CORES=(ARM_CR4)
基本上,我希望看到這種情況:
make FOO CORE=ARM_CM3
make FOO CORE=ARM_CM4
make FOO CORE=ARM_CR4
make ZOO CORE=ARM_CR4
我可以運行一個for循環,該循環可以遍歷庫數組。 但是,如何引用每個特定於庫的內核數組? 我可以使用double-substitution來獲取每個特定於庫的核心名稱變量...就是這樣! 不確定雙重替換是否也適用於數組。
for lib in ${LIBS[@]};do
eval "lib_name=${lib}_CORES"
cores_list=${!lib_name}
echo $lib_name $cores_list
done
輸出:
FOO_CORES ARM_CM3
ZOO_CORES ARM_CR4
如果您具有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
行為就像是為其分配名稱的參數一樣。
出於間接參數擴展的目的,參數“名稱”由數組名稱和所需索引組成。
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.