将 sqlite3 表名存储在 bash 数组中

将 sqlite3 表名存储在 bash 数组中

我试图弄清楚如何将包含 sqlite3 数据库中的几何字段的表名存储到 bash 数组中,然后我可以循环使用该数组。

这是我所拥有的,但目前是空的:

CMD="SELECT f_table_name FROM geometry_columns;"    
readarray -t arr < <( `sqlite3 db.sqlite "$CMD"` )

我也尝试过:

readarray -t arr < <( sqlite3 db.sqlite ".tables" )

但当我 print 时它只包含 1 个元素echo ${arr},而实际上应该有很多。我不明白因为

echo $(sqlite3 db.sqlite ".tables" )

将所有表名转储到标准输出。

关于如何以最简单、最有效的方式实现这一目标有什么想法吗?
理想情况下,使用readarray或任何其他单行通用解决方案可以在简单的 Debian docker 容器中工作。

我认为在磁盘上写入保存必要数据的临时文件没有任何问题。

答案1

为了子孙后代

CMD="SELECT f_table_name FROM geometry_columns;"

readarray -t arr < <( sqlite3 db.sqlite "${CMD}" )

for t in "${arr[@]}"; 
do
  echo "${t}"
done

实际上打印数组的每一行(显然,它是由行组成的结构)。我期望echo ${arr}默认情况下可以简单地将所有内容打印到标准输出,但事实并非如此,您必须循环遍历它。

请注意不要包含反引号 `` 或等效地放入整个 sqlite3 命令$()才能使其正常工作。

相关内容