我需要获取数组的下一个元素。对于连续数组,我的代码可以正常工作:
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
如何为稀疏数组执行此操作(可能不需要复制数组以重新建立索引)?
答案 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