从索引 k 开始打印数组元素

从索引 k 开始打印数组元素

我有一个 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

  1. 或者${ar[@]:$j}如果你愿意的话——第二个$是可选的,因为索引是在类似于的数字环境中评估的((...))

相关内容