разбить каждые два элемента в массив - PullRequest
0 голосов
/ 18 февраля 2019

У меня есть текст и каждый перевод строки, я сохраняю его значение в массиве и отображаю его:

var=("AAA
      aaa
      BBB
      bbb
      CCC
      ccc")

SAVEIFS=$IFS
 IFS=$'\n'
var=($var)
IFS=$SAVEIFS

for (( i=0; i<${#var[@]}; i++ )) do
  echo "${var[$i]}"
done

вывод:

   AAA
   aaa
   BBB
   bbb
   CCC
   ccc

, но я хочу два первых элемента водин и тот же индексный массив с прерывателем строки внутри каждого элемента, например

 var[0]=("AAA
         aaa")
  var[1]=("BBB
         bbb")
   var[2]=("CCC
         ccc")

1 Ответ

0 голосов
/ 18 февраля 2019

Если вы объявите массив, используя bash ANSI-C Цитирование

ary=($'AAA\naaa' $'BBB\nbbb' $'CCC\nccc')

Тогда вы получите то, что вам нужно.

Проверка содержимого массива

$ declare -p ary
declare -a ary='([0]="AAA
aaa" [1]="BBB
bbb" [2]="CCC
ccc")'

Или проверьте его с помощью printf:

$ printf '>%s<\n' "${ary[@]}"
>AAA
aaa<
>BBB
bbb<
>CCC
ccc<

Вы не можете написать

 var[0]=("AAA
         aaa")

, потому что с помощью скобок вы пытаетесьсохранить массив в элементе массива, а bash не разрешает массивы массивов.

Вы могли бы записать

var=(
"AAA
aaa"
"BBB
bbb"
"CCC
ccc"
)

Если у вас естьмассив слов вроде var=(AAA aaa BBB bbb CCC ccc), тогда вы можете сгруппировать элементы так:

ary=()
for (( i=0; i < ${#var[@]}; i+=2 )); do
    ary+=( "${var[i]}"$'\n'"${var[i+1]}" )
done
...