具有动态名称的 Bash 数组

具有动态名称的 Bash 数组

我编写了以下代码:

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

相关内容