簡體   English   中英

使用變量間接擴展的Bash數組擴展

[英]Bash array expansion using variable indirection expansion

我試圖通過間接擴展來擴展數組中的所有值:

> my_array=(coconut banana)
> echo "${my_array[@]}" 
coconut banana
> my_array_name=my_array
> echo ${!my_array_name}
coconut
> echo "${!my_array_name[@]}"
0

我在上一個命令中錯誤地使用了“數組鍵列表”,因為我不知道如何鍵入正確的命令?

我想得到:

coconut banana

可能不求助於一些丑陋的eval 。.一個糟糕的例子:

> echo \${$my_array_name[@]}
${my_array[@]}
> eval echo \${$my_array_name[@]}
coconut banana

注意

my_array可能包含帶空格的值!

編輯

在我編寫的函數中,my_array_name是通過“ $ 1”設置的,因此我不能按字面意義使用它。

類似於: https : //unix.stackexchange.com/questions/20171/indirect-return-of-all-elements-in-an-array,但我需要避免使用eval來保護腳本,避免如果腳本具有討厭的效果環境恰好在適當的時候被“黑客入侵” ...

這應該工作

my_array_name='my_array[@]'
echo "${!my_array_name}"

在注釋之后:您必須創建一個帶有數組名稱和'[@]'的字符串,另一個示例

my_array_name="$1"'[@]'
echo "${!my_array_name}"

注釋后:在函數中測試

display_elem() {
  local arrname
  arrname="$1[@]"
  printf "%s\n" "${!arrname}"
}

display_elem my_array

問題是my_array_name=my_array 您需要檢索my_array所有值。 嘗試以下方法:

 my_array_name=${my_array[@]}
 echo "${my_array_name[@]}"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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