Bash

如何將參數用作腳本的內部數組名稱?

  • May 10, 2022

當我編寫一個名為 array_call_self.sh 的腳本時,如下所示

#!/bin/bash
declare -A num word
word=(
[a]='index_a'
[b]='index_b'
[c]='index_c'
)
num=(
[a]=1
[b]=2
[c]=3
)
array=${$1[@]}
for i in ${$array[@]};do
 echo $i
done

當我執行bash array_call_self.sh word 它時返回我

test.sh: line 13: ${$1[@]}: bad substitution
test.sh: line 14: ${$array[@]}: bad substitution

看起來您可能想要使用名稱引用變數(在bash4.3 版或更高版本中可用):

#!/bin/bash

declare -A num word

word=(
[a]='index_a'
[b]='index_b'
[c]='index_c'
)

num=(
[a]=1
[b]=2
[c]=3
)

declare -n var="$1"

printf '%s\n' "${var[@]}"

這將變數聲明var為名稱引用變數,引用腳本的第一個參數命名的變數。如果第一個參數不是變數的有效名稱,或者它是 name var,那麼您將收到錯誤消息。

在聲明var並為其分配變數名稱後,訪問其值var就像您通常訪問命名變數的值一樣。

請注意,在腳本的命令行上提供變數的名稱是非常不可用的,您可能希望隱藏此類實現細節並將有效參數限制在有限的列表中,可能通過進行正確的命令行解析。上面的程式碼允許腳本使用者輸出任何腳本的變數

將值限制為有限列表的簡單方法:

case $1 in
       (word|num) ;; # ok
       (*)
               echo 'error' >&2
               exit 1
esac

declare -n var="$1"

引用自:https://unix.stackexchange.com/questions/702058