Bash

bash關聯數組,其中值是變數,列印每個值的變數名

  • April 7, 2022

我有以下關聯數組。

var1="dog"
var2="cat"
var3="moose"

declare -A asar01=(
["one"]="$var1"
["two"]="$var2"
["three"]="$var3"
)

我想循環並列印每個值變數名稱。所以只有“var1”、“var2”和“var3”會列印。我怎樣才能做到這一點?我嘗試了以下方法,但它列印了實際的腳本名稱。作為第一個變數輸出。

for i in "${!asar01[@]}";do
   echo "${!asar01[$i]}"
done

我的範例是嘗試使用該${!variable}方法列印名稱,但它不起作用。我怎樣才能做到這一點?

您正在嘗試向後使用間接擴展。如果要保留變數名稱,$請從關聯數組分配中刪除

#!/bin/bash

var1="dog"
var2="cat"
var3="moose"

declare -A asar01=(
["one"]="var1"
["two"]="var2"
["three"]="var3"
)

for i in "${!asar01[@]}"; do
  printf 'Key is: %s\n' "$i"
  printf 'Var name is: %s\n' "${asar01[$i]}"
  printf 'Var value is: %s\n' "${!asar01[$i]}"
done

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