如何在BASH

时间:2017-04-05 09:49:53

标签: arrays bash shell for-loop foreach

我有阵列:

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,com,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 个答案:

答案 0 :(得分:2)

错过了一些事情,使用bash中的算术运算符作为$((..))和预增量运算符!在双引号下

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 :(得分:1)

这个怎么样:

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