如何获取稀疏数组中的下一个元素?

时间:2018-07-08 07:43:37

标签: bash shell

我需要获取数组的下一个元素。对于连续数组,我的代码可以正常工作:

arr=(item{2..5})
value=item3

for ((i=0;i<${#arr[@]};++i)); do
    if [[ ${arr[i]} = "$value" ]] && (( i+1<${#arr[@]} )); then
        echo "${arr[i+1]}"
        break
    fi  
done

我没有找到任何关于参数扩展在稀疏数组上的行为的定义,不幸的是,这段代码也无法产生预期的结果:

arr=([3]=item2 [7]=item3 [10]=item4 [1]=item5)

for ((i=0;i<${#arr[@]};++i)); do
    if [[ ${arr[@]:i:1} = "$value" ]]; then
        ...
        ...
    fi
done

如何为稀疏数组执行此操作(可能不需要复制数组以重新建立索引)?

1 个答案:

答案 0 :(得分:2)

#!/bin/bash

arr=([3]=item2 [7]=item3 [10]=item4 [1]=item5)
value="item3"
switch="0"

# loop over array's indexes
for i in "${!arr[@]}"; do
  if [[ $switch = "1" ]]; then
    echo "found ${arr[$i]} in element $i"
    switch="0"
    break
  fi

  if [[ ${arr[$i]} = "$value" ]]; then
    echo "found ${arr[$i]} in element $i"
    switch="1"
    continue
  fi
done

输出:

found item3 in element 7
found item4 in element 10

该脚本不会检查是否已到达数组末尾。


请参阅:help continue