【问题标题】:Bash assign variable command output depending on index loop [duplicate]Bash根据索引循环分配变量命令输出[重复]
【发布时间】:2017-11-01 07:17:06
【问题描述】:

我有这样的事情:

#!/bin/bash

#numero di nodi cache della edge network
NCACHES=$1

#creo vm manager (dello swarm) e balancer
docker-machine create -d virtualbox manager
docker-machine create -d virtualbox balancer

#creo le restanti NCACHES-1 VM
for i in {0..NCACHES-1}
do 
    echo "Creating VM $i"
    docker-machine create -d virtualbox worker$i
done

docker-machine create -d virtualbox backend

IPManager="$(docker-machine ip manager)"
echo "IP VM swarm manager=$IPManager"

IPBalancer="$(docker-machine ip balancer)"
echo "IP VM balancer=$IPBalancer"

for i in {0..NCACHES-1}}
do
    IPCache$i="$(docker-machine ip worker$i)"
    echo "IP worker$i=IPCache$i"
done

我希望在最后一个循环中,我不知道如何将 i 索引传递给 "$(docker-machine ip worker$i)" 命令,然后将 IPCache$i 设置为此返回值。然后我不知道如何回显所有这些 IP 地址。

【问题讨论】:

  • 为什么不把 IPCache 做成一个数组呢?然后你可以只有一个 IPCache 变量并设置IPCache[$i]
  • 您正在寻找 variable indirection,但我赞同 Charles Duffy 使用数组代替的建议
  • for i in {0..NCACHES-1} 永远不会工作!大括号扩展将发生在之前变量扩展
  • 您没有注意到for i in {0..NCACHES-1} 有问题?
  • @Aaron, grumble 回复:建议将 ABS 作为参考——它是 bash 的 W3Schools,充满了过时的信息和不良做法的例子。我强烈建议使用the BashFAQ #6 section on indirect assignment

标签: bash


【解决方案1】:

使用数组。

IPCache=()

for ((i = 0; i < NCACHES; i++))
do
    IPCache+=("$(docker-machine ip worker$i)")
    echo "IP worker$i=${IPCache[i]}"
done

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-16
    • 1970-01-01
    • 1970-01-01
    • 2014-01-08
    • 1970-01-01
    • 2011-01-19
    相关资源
    最近更新 更多