Linux

bash 數組中的間接訪問

  • July 19, 2020

我正在嘗試執行以下間接任務:

host_1=(192.168.0.100 user1 pass1)
host_2=(192.168.0.101 user2 pass2)

hostlist=( "host_1" "host_2" )

for item in ${hostlist[@]}; do

current_host_ip=${!item[0]}
current_host_user=${!item[1]}
current_host_pass=${!item[2]}

echo "IP: $current_host_ip User: $current_host_user Pass: $current_host_pass"

done

我試圖了解我應該如何執行這個間接請求,所以我從數組“hostlist”中提取主機名,然後我應該做間接請求來提取主機 1 IP、使用者並通過。但是當我嘗試這樣做時,我只能使用第一個變數(只有 IP),或者一個變數中的所有變數(如果我添加

$$ @ $$到變數名的末尾)、空結果或數組中的數字。我不明白如何首先將 host_1 數組複製到 current_ 變數中,然後(在我的腳本完成一些工作之後)我需要將 host_2 變數傳遞給相同的變數 current_。 你能指出我的錯誤嗎?我認為這是我無法採用的問題的解決方案:

間接返回數組中的所有元素

您可以使用對數組變數的名稱引用:

for item in "${hostlist[@]}"; do

 declare -n hostvar=$item
 current_host_ip=${hostvar[0]}
 current_host_user=${hostvar[1]}
 current_host_pass=${hostvar[2]}

 echo "IP: $current_host_ip User: $current_host_user Pass: $current_host_pass"
done

在這裡,變數hostvar是指名為的變數$item,它可以是數組,也可以host_1host_2.

使用變數間接和數組值的副本:

for item in "${hostlist[@]}"; do

   x=${item}[@]
   y=( "${!x}" )

   current_host_ip=${y[0]}
   current_host_user=${y[1]}
   current_host_pass=${y[2]}

   echo "IP: $current_host_ip User: $current_host_user Pass: $current_host_pass"
done

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