Распечатать элементы массива, начиная с индекса k

Распечатать элементы массива, начиная с индекса k

У меня есть массив bash, и я хочу вывести элементы массива, начиная с index 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

В качестве альтернативы можно использовать цикл for в стиле C:

for ((i=k;i<${#ar[@]};i++)); do
  printf '%s\n' "${ar[i]}"
done

  1. или, ${ar[@]:$j}если вам так больше нравится, второй $вариант необязателен, поскольку индексы оцениваются в числовом контексте, аналогичном((...))

Связанный контент