我编写了以下代码:
tableList=("books" "centres" "contacts" "courses")
for tbName in ${tableList[@]}; do
declare -a tableName="ar_${tbName}"
for col in $(mysql --login-path=local $db -Bse "SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = 'PEG' AND TABLE_NAME = '$tbName'"); do
eval tableName+=("$col")
done
done
set
我有一个这样的数据库:
desc books
+--------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------+--------------+------+-----+---------+----------------+
| book1 | varchar(64) | YES | | NULL | |
| book2 | varchar(64) | YES | | NULL | |
| book3 | varchar(64) | YES | | NULL | |
+--------+--------------+------+-----+---------+----------------+
desc contacts
+----------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+--------------+------+-----+---------+----------------+
| contact1 | varchar(64) | YES | | NULL | |
| contact2 | varchar(64) | YES | | NULL | |
| contact3 | varchar(64) | YES | | NULL | |
+----------+--------------+------+-----+---------+----------------+
目的是获取数组 tableList 中描述的每个表的列名,并将它们放入以 ar_+[表名] 作为数组名的数组中。
例如,表 books 中的所有列名都应放入名为 ar_books 的数组中。
像这样 :
ar_books = ("book1" "book2" "book3)
不幸的是,这不起作用,并且集合显示新数组名称(例如 ar_courses)作为第一次出现被放入名为 tableName 的数组中,但没有创建名为 ar_courses 的数组。
我从昨天下午开始查看了 stackexchange,但我不知道如何让它发挥作用。
任何帮助,将不胜感激。
答案1
Bash 的设计不适合处理多维数组。也许你应该考虑用其他语言(如 Python)重写。
但是你可以用这个作为解决方法:https://stackoverflow.com/a/6151190/290087