bash 数组 > for 循环直到 x 项



>我目前正在使用 for 循环,如下所示:

for server in "${servers[@]}"; do
if  nc -v -z -w1 ${server} 3389 2>/dev/null; then
    xfreerdp /u:$username /p:$pass /t:"$1""-""${server}" /w:$width /h:$height +cert-ignore +wm-class:xfree +unmap-buttons +window-drag +fonts +clipboard -grab-keyboard /sec:nla /v:${server} > /dev/null 2>&1 &
else    echo "No connection to "${server}""
fi
done

但是,当上述数组达到 6 个以上时,这将填满我的屏幕。所以我要完成的是使用 for 循环直到它到达第 6 个项目,然后对数组中的其他项目使用不同的命令。我看过一些内部外循环示例,但我不确定它们是否是我正在寻找的。

如果您只想遍历数组中的前六个项目,最简单的方法(如果不是稀疏)是:

for server in "${servers[@]:0:6}"; do

。之后,您可以使用 "${servers[@]:6}" 引用其余项目。


如果您确实想优雅地处理稀疏数组,您可以考虑按索引进行迭代(以便您可以从上次中断的地方继续)并使用计数器:

i=0
for server_idx in "${!servers[@]}"; do
  (( ++i > 6 )) && break
  server=${servers[$server_idx]}
  : "other contents here"
done
# the last index already processed is left in $server_idx

顺便说一下,您可以考虑的一种方法是每六次循环迭代暂停一次:

idx=0
for server in "${servers[@]}"; do
  if (( ++idx % 0 == 0 )); then
    echo "Waiting for background jobs to complete..." >&2
    wait
    echo "...background jobs finished, press enter to continue:" >&2
    read _ </dev/tty
  fi
  xfreerdp ... &
done

最新更新