我试图弄清楚如何将包含 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 命令$()
才能使其正常工作。