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