yarkov
@yarkov
Проект "Жизнь после смерти" - lifeafterdeath.ru

Есть в bash синтаксис многомерных массивов?

Приходится держать 3 массива одинаковой длинны.
namelist=("Россия" "Россия-2" "Латвия" "США" "Германия" "Швеция" "Нидерланды" "Япония")

latins=("russia" "russia-2" "latvia" "usa" "germany" "sweden" "netherlands" "japan")

loadlist=("Russia_freeopenvpn" "Russia-2_freeopenvpn" "Latvia_freeopenvpn" "freeopenvpn_USA" "Germany_freeopenvpn" "Sweden_freeopenvpn" "Netherlands_freeopenvpn" "freeopenvpn_Japan")

Хочется как-то так упорядочить сие безобразие.
#!/bin/bash

set -e

arr=(\
    ("Россия" "russia" "Russia_freeopenvpn")\
    ("Россия-2" "russia-2" "Russia-2_freeopenvpn")\
    ("Латвия" "latvia" "Latvia_freeopenvpn")\
    ("США" "usa" "freeopenvpn_USA")\
    ("Германия" "germany" "Germany_freeopenvpn")\
    ("Швеция" "sweden" "Sweden_freeopenvpn")\
    ("Нидерланды" "netherlands" "Netherlands_freeopenvpn")\
    ("Япония" "japan" "freeopenvpn_Japan")\
)

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

На выходе ошибка:
$ ./test.sh
./test.sh: строка 6: ошибка синтаксиса около неожиданной лексемы `('
  • Вопрос задан
  • 772 просмотра
Решения вопроса 1
saboteur_kiev
@saboteur_kiev Куратор тега bash
software engineer
нет, bash не поддерживает многомерные массивы.

Но я вижу, что у вас все названия не содержат пробелов, поэтому храните их строками
#/bin/bash

arr=(
"Россия russia Russia_freeopenvpn"
"Россия-2 russia-2 Russia-2_freeopenvpn"
"Латвия latvia Latvia_freeopenvpn"
"США usa freeopenvpn_USA"
"Германия germany Germany_freeopenvpn"
"Швеция sweden Sweden_freeopenvpn"
"Нидерланды netherlands Netherlands_freeopenvpn"
"Япония japan freeopenvpn_Japan")
IFS=' ' read -r -a array <<< "${arr[1]}"

echo "name: ${array[0]}, smallname: ${array[1]}, vpnname: ${array[2]}"
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы