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" )
모든 테이블 이름을 표준 출력으로 덤프합니다.
가장 간단하고 효율적인 방법으로 이를 달성하는 방법에 대한 아이디어가 있습니까? 이상적으로는 간단한 데비안 도커 컨테이너에서 작동하는 다른 한 줄 일반 솔루션을
사용하세요 .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 명령을 동일하게 입력하여 $()
작동하게 하십시오.