Linux
bash 數組中的間接訪問
我正在嘗試執行以下間接任務:
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_1
是host_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