Автор Тема: eval и массивы  (Прочитано 431 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн v4567

  • Постоялец
  • ***
  • Сообщений: 105
  • Рейтинг: 0
  • Пол: Мужской
    • Просмотр профиля
  • Откуда: Харьков
eval и массивы
« : 20 Июля 2017, 22:14:20 »
Есть несколько массивов:
Код: Bash [Выделить]

mas1=(1 2 3 4 5)
mas2=(6 7 8 9 0)
mas3=(a s d f g)


Не получается перебрать массивы меняя их коэффициент и скопировать один массив в другой.


Делаю это вот так:
Код: Bash [Выделить]

mas1=(1 2 3 4 5)
mas2=(6 7 8 9 0)
mas3=(a s d f g)
declare -a MASSIV
per="mas"
for(( i=1 ; i<4 ; i++ ))
 do
   zk=$per$i
   eval MASSIV=("${zk[@]}")
done


Перебрал уже много вариантов:
Код: Bash [Выделить]

eval MASSIV=("${$zk[@]}")
eval MASSIV=("${\$zk[@]}")
eval MASSIV=("${'$'zk[@]}")
eval MASSIV=( ${"$zk"[@]} )
и т. д.

но выдаёт ошибку или копируется только первый элемент массива.

Оффлайн shurutov

  • Постоялец
  • ***
  • Сообщений: 245
  • Рейтинг: 2
  • Пол: Мужской
    • mshurutov@jabber.ru
    • Просмотр профиля
  • Откуда: МО
eval и массивы
« Ответ #1 : 21 Июля 2017, 11:32:15 »
Запрос поисковикам: "bash собрать имя переменной", первые две ссылки из выдачи гугля. Подумать. Результат:
user@host bin $ sed -ne 1p -ne 21,33p ./proba.sh
#!/usr/bin/env bash

mas1=(1 2 3 4 5)
mas2=(6 7 8 9 0)
mas3=(a s d f g)

declare -a MASSIV
per="mas"
for(( i=1 ; i<4 ; i++ ))
 do
   zk=$(eval echo \${$per$i[@]})
   echo "One: ${zk[@]}"
   eval MASSIV=("${zk[@]}")
   echo "Two: ${MASSIV[@]}"
done
user@host bin $ ./proba.sh
One: 1 2 3 4 5
Two: 1 2 3 4 5
One: 6 7 8 9 0
Two: 6 7 8 9 0
One: a s d f g
Two: a s d f g

user@host bin $ bash --version
GNU bash, version 4.3.48(1)-release (x86_64-pc-linux-gnu)
Copyright (C) 2013 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>

This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

пропуск со 2-й по 20-ю строки в скрипте - оно к делу не относится, это свои рукоблудия.
С уважением,
Шурутов Михаил.

Оффлайн v4567

  • Постоялец
  • ***
  • Сообщений: 105
  • Рейтинг: 0
  • Пол: Мужской
    • Просмотр профиля
  • Откуда: Харьков
eval и массивы
« Ответ #2 : 21 Июля 2017, 13:08:18 »
shurutov,  Огромное спасибо!
Всё работает, разобраться бы ещё в этой конструкции, толком я так и не могу понять этот eval.
Я наверное не умею искать в интернете. Облазил всё но так и не нашёл. Если бы Вы написали ещё и поисковый запрос который вводили в гугле.

Оффлайн shurutov

  • Постоялец
  • ***
  • Сообщений: 245
  • Рейтинг: 2
  • Пол: Мужской
    • mshurutov@jabber.ru
    • Просмотр профиля
  • Откуда: МО
eval и массивы
« Ответ #3 : 21 Июля 2017, 13:46:01 »
Если бы Вы написали ещё и поисковый запрос который вводили в гугле.
??? А это что:
Запрос поисковикам: "bash собрать имя переменной"
С уважением,
Шурутов Михаил.

Оффлайн v4567

  • Постоялец
  • ***
  • Сообщений: 105
  • Рейтинг: 0
  • Пол: Мужской
    • Просмотр профиля
  • Откуда: Харьков
eval и массивы
« Ответ #4 : 21 Июля 2017, 13:55:23 »
Я не обратил внимания, что Вы уже написали этот поисковый запрос. Как говорится "смотрю в книгу вижу фигу".
Сейчас разбираюсь с этим eval.