У меня есть массив 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
- или,
${ar[@]:$j}
если вам так больше нравится, второй$
вариант необязателен, поскольку индексы оцениваются в числовом контексте, аналогичном((...))