Хранить каждую запись mysql (несколько строк) как переменную в bash

#mysql #linux #bash

#mysql #linux #bash

Вопрос:

У меня есть скрипт bash, который запускает SQL-запрос и выводит следующее:

 *************************** 1. row ***************************
name: danny
id: 123
age: 1
wait: 326.000000
*************************** 2. row ***************************
name: ronny
id: 1234
age: 2
wait: 21.000000
  

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

 Person1["name"] = danny,  Person2["name"]=ronny
  

Ответ №1:

Индекс массива должен быть числовым. Но вы можете использовать индекс вместо имени поля. Переменные известны только внутри блока. Но с помощью простого трюка (sourcen) вы выводите их наружу.

 # ASSUMPTION: the input data are in the file

Personen=$(mktemp)
i=0
while read line; do
    [[ "${line:0:1}" == '*' ]] amp;amp; continue
    key=${line%%:*}
    value=${line##*: }
    [[ "$key" == "name" ]] amp;amp; ((i  ))
    echo "Person_${key}[$i]="$value""
done < file >$Personen

source $Personen

echo "${Person_name[1]} ${Person_age[1]}"
echo "${Person_name[2]} ${Person_wait[2]}"

rm $Personen
  

вывод

 danny 1
ronny 21.000000