首页 > 解决方案 > 在 Bash 中使用数组键列表时开始循环到特定索引

问题描述

我需要操作数组的键,所以我使用以下循环:

#!/bin/bash

array=(aaa bbb ccc ddd)
for i in "${!array[@]}"; do
        content="${array[i]}"
        echo "$i - $content"
done

结果:

0 - aaa
1 - bbb
2 - ccc
3 - ddd

但是,如果我需要在特定索引处开始循环怎么办?

如果我没有遍历索引,语法将是:

for i in "${!array[@]:2}"; do
        content="${array[i]}"
        echo "$i - $content"
done

预期的结果应该是:

2 - ccc
3 - ddd

但相反,我有这个错误:

line 4: aaa bbb ccc ddd: bad substitution

有没有办法获得预期的结果?

编辑:我曾经这样做:

for i in "${!array[@]}"; do
        [[ $i -lt 2 ]] && continue
        content="${array[i]}"
        echo "$i - $content"
done

问题是如果密钥不是 2 而是 256423,则启动循环需要一段时间。

标签: arraysbashkeyindices

解决方案


您可以在定义的位置开始索引:

for ((i=2; i<${#array[@]}; i++)); do echo "$i - ${array[i]}"; done
2 - ccc
3 - ddd

推荐阅读