Bash:在for循环中向数组添加元素

时间:2018-10-29 18:39:13

标签: arrays bash for-loop arraylist concatenation

我有一个主机名列表,例如:

hostnames = (host1 host2 host3)

此外,我正在尝试将这些主机名解析为IP:

for host in ${hostnames[@]}; do
    var=`doing some stuff`  # It returns IP address with odd spaces
    ips+=`(echo $var|xargs)`  # Removes odd spaces

它可以工作,但是以以下格式返回:

127.0.0.1127.0.0.2127.0.0.3

我希望有ips使其可以迭代并使用索引进行获取:

echo ${ips[2]}  # Should return 127.0.0.3

for (( i=0; i<${#ips[@]}; i++ )); do
    echo ${ips[i]}

如何以正确的方式添加这些IP,以便可以迭代这些值并通过索引提取它们?

1 个答案:

答案 0 :(得分:0)

等号周围不应有空格:

hostnames=(host1 host2 host3)

要将条目添加到数组,需要在反引号 之外加括号:

ips+=(`echo $var|xargs`)

一种更简单的删除空格的方法是用${var//pattern/string}替换。由于它避免了不必要的子进程,因此速度更快。

ips+=("${var// }")