asyaevloeva
@asyaevloeva

Как слайсить массив на баше?

я пытаюсь сделать слайс моего массива array от j до j+6
но при том что j увеличивается на 6, мой массив слайсится не так как нужно:

array=( a b c d e f g h i j k l m n o p q r s t u v w x w z a b c d e f g h i j k )
j=0
while true
do
        for i in ${array[@]:$j:$((j+6))}
        do
                echo ${array[@]:$j:$((j+6))}
                j=$(($j+6))
                echo $j
        done
done


получается так:

a b c d e f
6
g h i j k l m n o p q r
12
m n o p q r s t u v w x w z a b c d
18
s t u v w x w z a b c d e f g h i j k
24
w z a b c d e f g h i j k
30
e f g h i j k
36
k
42


а должно быть так:

a b c d e f
6
g h i j k l 
12
m n o p q r 
18
s t u v w x 
24
w z a b c d 
30
e f g h i j 
36
k
42
  • Вопрос задан
  • 123 просмотра
Решения вопроса 4
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
мой массив слайсится не так как нужно

после второго двоеточия идёт длина а не индекс. Т.е. должно быть echo ${array[@]:$j:6}
Ответ написан
Комментировать
@AVKor
#!/usr/bin/env bash

array=(a b c d e f g h i j k l m n o p q r s t u v w x y z)
j=0
while [ "$j" -le "26" ]
do
  echo $j
  a=${array[@]:$j:6}
  echo ${a[@]}
  j=$((j+6))
done

$ ./test.sh 
0
a b c d e f
6
g h i j k l
12
m n o p q r
18
s t u v w x
24
y z
Ответ написан
Комментировать
saboteur_kiev
@saboteur_kiev Куратор тега bash
software engineer
declare -a array=( a b c d e f g h i j k l m n o p q r s t u v w x w z a b c d e f g h i j k )
declare -i j=1 k=6

for item in ${array[@]}; do
  j+=1
  printf "$item "
  if [ $j -gt $k ]; then
    printf "\n$k"
    k=$k+6
  fi
done


>bash.exe a.sh
a b c d e f
6
g h i j k l
12
m n o p q r
18
s t u v w x
24
w z a b c d
30
e f g h i j
36
k
Ответ написан
Комментировать
xotkot
@xotkot
хорошо есть и хорошо весьма
for ((i=0;i<${#array[@]};i=i+6));do echo ${array[@]:i:6};done
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы