bash配列にsqlite3テーブル名を保存する

bash配列にsqlite3テーブル名を保存する

sqlite3データベースのジオメトリフィールドを含むテーブル名をbash配列に格納することで、繰り返す方法を見つけようとしています。

これが私が持っているものですが、現在は空です。

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

私も次のことを試しました。

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

ただし、印刷にはecho ${arr}多くの要素が必要ですが、1つの要素しか含まれていません。理解できません。

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

すべてのテーブル名を標準出力にダンプします。

最も簡単で効率的な方法でこれを達成する方法についてのアイデアはありますか?理想的には、単純なDebian Dockerコンテナで動作する他の1行の一般的なソリューションを
使用してください。readarray

必要なデータを保持するディスクに一時ファイルを作成することに問題はありません。

答え1

未来世代のために

CMD="SELECT f_table_name FROM geometry_columns;"

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

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

実際に配列の各行を印刷します(明らかに行で構成された構造です)。私は基本的に単にすべてをstdoutとして印刷すると予想しましたがecho ${arr}、そうではありません。繰り返す必要があります。

バックティック「」を含めないように注意してください。または、sqlite3コマンド全体を同じように入力して$()機能させます。

関連情報