Рейтинг:0

Вывести элементы массива из индекса k

флаг jp

У меня есть массив bash, и я хочу распечатать элементы массива, начиная с индекса к.

Не получилось со следующей стратегией.

printf "%s\n" "${ar[$j:]}"
cocomac avatar
флаг cn
Почему бы просто не использовать цикл for?
Рейтинг:1
флаг hr

Синтаксис ${ар[@]:j}1. От Расширение параметра часть человек:

   $ {параметр: смещение: длина}
   .
   .
   .
          Если параметр представляет собой имя индексированного массива с индексом @ или *,
          результатом являются элементы длины массива, начинающиеся с ${pa
          раметр[смещение]}. Отрицательное смещение берется относительно одного
          больше, чем максимальный индекс указанного массива. Это
          ошибка расширения, если длина оценивается как число меньше нуля.

Так дано

$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++)); делать
  printf '%s\n' "${ar[i]}"
сделано

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

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.