You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Bash循环中按行分组输出数组$LIST,而非逐个元素打印?

解决bash数组按组换行输出的问题

你的问题核心是当前数组LIST将每个独立字符串作为单独元素,循环时会逐个输出。要实现每3个元素为一行的分组输出,有以下几种可行方案:

方案1:C风格for循环按索引步长遍历

利用数组索引,每次步进3,取出对应位置的3个元素拼接输出:

LIST=( \
"1" "Some text" "ON" \
"2" "Some text" "OFF" \
"3" "Some text. Some text" "ON" \
"4" "Some text" "OFF" \
"5" "Some text. Some text" "OFF" \
)

for ((i=0; i<${#LIST[@]}; i+=3)); do
    echo "${LIST[i]} ${LIST[i+1]} ${LIST[i+2]}"
done

方案2:while循环结合shift处理

将数组转为位置参数,每次取出前3个元素后移除,直到参数耗尽:

LIST=( \
"1" "Some text" "ON" \
"2" "Some text" "OFF" \
"3" "Some text. Some text" "ON" \
"4" "Some text" "OFF" \
"5" "Some text. Some text" "OFF" \
)

set -- "${LIST[@]}"

while (( $# >= 3 )); do
    echo "$1 $2 $3"
    shift 3
done

方案3:重新构造数组(最直观)

如果可以提前调整数组结构,将每组元素用引号包裹作为单个数组元素,直接循环输出即可:

LIST=( \
"1 Some text ON" \
"2 Some text OFF" \
"3 Some text. Some text ON" \
"4 Some text OFF" \
"5 Some text. Some text OFF" \
)

for ENTRY in "${LIST[@]}"; do
    echo "$ENTRY"
done

以上三种方案都能得到你期望的输出结果,可根据实际场景选择:

  • 方案1适合固定每组元素数量的场景,代码简洁直接;
  • 方案2更灵活,能处理元素总数不是3的倍数的情况;
  • 方案3最易理解,适合可以提前调整数组构造逻辑的场景。

内容的提问来源于stack exchange,提问作者Paweł Selen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 12:54:19