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" )

모든 테이블 이름을 표준 출력으로 덤프합니다.

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

관련 정보