【问题标题】:How to increment value in associative array in BASH如何在 BASH 中的关联数组中增加值
【发布时间】:2017-04-05 09:49:52
【问题描述】:

我有数组:

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
.....

我知道,我们应该使用循环,但是如果我有很多服务器,我应该如何使用循环“for”?使用我所有的数组变量?

【问题讨论】:

    标签: arrays bash shell for-loop foreach


    【解决方案1】:

    错过了几件事,在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循环的版本一样。这将在关联数组工作(使用declare -A array

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

    【讨论】:

      【解决方案2】:

      这个怎么样:

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

      【讨论】:

      • 不错。但如果我不知道,我的数组中有多少个元素?
      • 您需要告诉我这些信息的原始位置。如果你根本没有,我们就做不到。数组是否已经填充了正确的键?然后我们可以遍历它们并从中获取值(至少到目前为止看起来是这样的)。 (我只是看到这就是 Inian 实现的。)
      • 我有很多价值观。我给你看前五个,当然,我们有不同的 IP。不仅是 172.16.170.0/24,我还有一个 192.168.1.0/24 等。
      • 是的,但是你在哪里有它? bash 可以在什么数据结构中查找它们?
      猜你喜欢
      • 2015-06-30
      • 1970-01-01
      • 2012-01-01
      • 2018-07-16
      • 2011-03-07
      • 1970-01-01
      • 1970-01-01
      • 2011-10-03
      相关资源
      最近更新 更多