逐行解析sqlite查询

逐行解析sqlite查询,sql,bash,sqlite,Sql,Bash,Sqlite,我有一个我自己无法解决的问题,我有一个包含数据的SQLite数据库 要检索数据,我使用bash脚本和命令sqlite3db“selectprkey FROM printers” 输出如下所示: 一, 三, 四, 五, 六, 七, 我需要解析每一行并将其用于下一个命令。不使用>文件 您可以在sqlite命令的返回值上使用for循环 #!/bin/bash for line in $(sqlite3 db "SELECT prkey FROM printers"); do echo "line

我有一个我自己无法解决的问题,我有一个包含数据的SQLite数据库 要检索数据,我使用bash脚本和命令
sqlite3db“selectprkey FROM printers”

输出如下所示:

一,

三,

四,

五,

六,

七,

我需要解析每一行并将其用于下一个命令。不使用
>文件


您可以在sqlite命令的返回值上使用for循环

#!/bin/bash

for line in $(sqlite3 db "SELECT prkey FROM printers"); do
  echo "line is --> $line" # do stuff with $line
done
for prkey in `sqlite3 db "SELECT prkey FROM printers"`; do
    echo $prkey; #replace with your command
done;

for
循环可以工作,但它们不是很健壮:如果输出中的一行有空格,它们就会中断,shell必须在开始运行循环之前将查询的整个输出存储在内存中。这两个问题很容易解决:

sqlite3 db "SELECT ..." | while read prkey; do
   echo "do stuff with $prkey"
done

最好使用
$()
而不是反勾号。后者是deprecated@SiegeX:你能推荐一本书/链接来支持你的主张吗@状态:当然,请参阅。由于这两个版本的语法都是POSIX,
$()
可以做
`
版本所能做的一切,但更容易嵌套,根据定义,后者是不推荐的。+1,实际上空格会破坏for的使用,因此与其他版本相比,此版本是更正确的答案。希望其他人也承认这一点。您可能需要设置:
IFS='|'