2017-04-05 41 views
1

遞增關聯數組值我有數組:如何BASH

declare -A server 
server[172.16.170.1]='t1.com' 
server[172.16.170.2]='t2.com' 
server[172.16.170.3]='t3.com' 
server[172.16.170.4]='t4.com' 
server[172.16.170.5]='t5.com' 
..... 

我不想每次都寫,「T1,玉米,t2.com ......」 我想增加它 好的:

first=0 
first=$(($first+1)) 

它是第一個元素的工作。

first=0 
first=$(($first+1)) 
declare -A server 
server[172.16.170.1]='t$first.com' 
server[172.16.170.2]='t$first.com' 
server[172.16.170.3]='t$first.com' 
server[172.16.170.4]='t$first.com' 
server[172.16.170.5]='t$first.com' 
..... 

在輸出我們將有:

server[172.16.170.1]=t1.com 
server[172.16.170.2]=t1.com 
server[172.16.170.3]=t1.com 
server[172.16.170.4]=t1.com 
server[172.16.170.5]=t1.com 
..... 

我知道,我們應該用循環,但如果我有很多的服務器,如何我應該使用循環「爲」?用我所有的數組變量?

回答

2

幾個事情錯過了,使用算術運算符bash作爲$((..))與pre-increment操作符!下雙引號

first=0 
declare -A server 
server[172.16.170.1]="t$((++first)).com" 
server[172.16.170.2]="t$((++first)).com" 
server[172.16.170.3]="t$((++first)).com" 
server[172.16.170.4]="t$((++first)).com" 
server[172.16.170.5]="t$((++first)).com" 

和打印關聯數組只使用declare內置。

declare -p server 
declare -A server='([172.16.170.1]="t1.com" [172.16.170.3]="t3.com" [172.16.170.2]="t2.com" [172.16.170.5]="t5.com" [172.16.170.4]="t4.com")' 

和for循環版本相同。這將工作ONLY關聯數組(與declare -A array

count=0 
for i in "${!server[@]}"; do 
    server["${i}"]="t$((++count)).com" 
done 
1

如何:

declare -A server 
for ((i=1; i<=5; i++)) 
do 
    server[172.16.170.$i]=t$i.com 
done 
+0

不壞。但如果我不知道,我的數組中有多少個元素? – Piduna

+0

您需要告訴我信息的來源。如果你根本沒有,我們不能這樣做。數組是否已經填充了正確的密鑰?然後我們可以對它們進行迭代並從它們中派生出值(至少看起來像現在這樣)。 (我只是看到這是Inian已經實現的。) – Alfe

+0

我有很多值。我向你展示前五名,當然,我們有不同的知識產權。不僅172.16.170.0/24,我有一個192.168.1.0/24等。 – Piduna