![从索引 k 开始打印数组元素](https://linux22.com/image/1071435/%E4%BB%8E%E7%B4%A2%E5%BC%95%20k%20%E5%BC%80%E5%A7%8B%E6%89%93%E5%8D%B0%E6%95%B0%E7%BB%84%E5%85%83%E7%B4%A0.png)
我有一个 bash 数组并想要从索引开始打印数组元素k
。
下列策略并没有取得预期的效果。
printf "%s\n" "${ar[$j:]}"
答案1
语法是${ar[@]:j}
1。来自Parameter Expansion
的部分man bash
:
${parameter:offset:length}
.
.
.
If parameter is an indexed array name subscripted by @ or *, the
result is the length members of the array beginning with ${pa‐
rameter[offset]}. A negative offset is taken relative to one
greater than the maximum index of the specified array. It is an
expansion error if length evaluates to a number less than zero.
因此
$ ar=("1" "2 3" "4" "5 6" "7 8" "9")
然后(记住 bash 数组索引是从 0 开始的):
$ j=3; printf '%s\n' "${ar[@]:j}"
5 6
7 8
9
或者,使用 C 风格的 for 循环:
for ((i=k;i<${#ar[@]};i++)); do
printf '%s\n' "${ar[i]}"
done
- 或者
${ar[@]:$j}
如果你愿意的话——第二个$
是可选的,因为索引是在类似于的数字环境中评估的((...))