簡體   English   中英

如何在bash中雙重替換數組變量

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM