Вы могли бы сделать некоторые фокусы с associative arrays (введен в Bash 4.0) и namerefs (смотрите руководство для declare
и первый абзац Shell Parameters – введен в Bash 4.3):
#!/bin/bash
declare -A identification0=(
[email]='[email protected]'
[password]='admin123'
)
declare -A identification1=(
[email]='[email protected]'
[password]='passwd1!'
)
declare -n identification
for identification in ${[email protected]}; do
echo "Email: ${identification[email]}"
echo "Password: ${identification[password]}"
done
Печатается
Email: [email protected]
Password: admin123
Email: [email protected]
Password: passwd1!
declare -A
объявляет ассоциативный массив.
Хитрость заключается в назначении всех имен переменных «объекты» (ассоциативных массивов), начинающихся с того же префикса, например identification
. ${[email protected]}
обозначения расширяется до всех имен переменных, начиная с prefix
:
$ var1=
$ var2=
$ var3=
$ echo ${[email protected]}
var1 var2 var3
Затем, чтобы получить доступ к пары ключ-значение ассоциативного массива, мы объявить переменную управления для для цикла с атрибутом nameref:
declare -n identification
так, чтобы петля
for identification in ${[email protected]}; do
делает identification
ведут себя, как если бы она была фактическая переменная с го e расширение ${[email protected]}
.
По всей вероятности, это будет легче сделать что-то вроде следующего, хотя:
emails=('[email protected]' '[email protected]')
passwords=('admin123' 'passwd1!')
for ((i = 0; i < ${#emails[@]}; ++i)); do
echo "Email: ${emails[$i]}"
echo "Password: ${passwords[$i]}"
done
есть, просто цикл над двумя массивами, содержащими информацию.
'bash' имеет только один тип данных: строка. Даже массивы - это просто еще одна форма синтаксического цитирования, позволяющая списки строк, содержащих произвольные значения (т. Е. Пробельные символы). (Ассоциативные массивы, введенные в 'bash' 4, немного лучше, но все еще не там, где достаточно, чтобы разрешить типы структур данных, которые вы ищете.) – chepner
' ksh93' и более поздние поддерживающие переменные, определенные по описанию. К сожалению, 'ksh', похоже, оставлен, так как даже man-страницы, на которые указывает kornshell.com, теперь являются мертвыми ссылками (и были на некоторое время). И я не смог бы указать вам документацию о том, как использовать ваш ksh для этой функции. (Его, вероятно, где-то там). Удачи. – shellter