在bash中执行sqlite3查询

时间:2018-12-13 19:43:10

标签: bash sqlite posix

以bash执行

sqlite3 database.db 'select * from databases'

给我很好的输出,但是不幸的是,当我想从变量sqlite3创建查询时,不想合作。

例如:

cmd="select * from databases"
cmd1="sqlite3 database.db"
cmd2="'select * from databases'"
echo $($cmd1 \'$cmd\')
echo $($cmd1 '$cmd')
echo $($cmd1 $cmd)
echo $($cmd1 $cmd2)
echo `$cmd1 $cmd2`

以上所有方法均无效。我希望有一个函数可以执行查询,例如“从数据库中选择*”。

2 个答案:

答案 0 :(得分:0)

让我们尝试这种方法:

cmd1="sqlite3 database.db"
cmd2="select * from databases"
$cmd1 "$cmd2"

我刚刚尝试过-它对我有用: enter image description here

答案 1 :(得分:0)

您的麻烦是分词。运行此命令时:

sqlite3 database.db $sql

shell将$sql拆分为单词。但是sqlite3希望将SQL命令作为单个参数。为防止单词分裂,必须将$sql用双引号引起来:

sqlite3 database.db "$sql"

如果要将sqlite3 database.db存储在名为cmd的变量中, 您可以这样写:

$cmd "$sql"

shell将$cmd拆分为单词,在这种情况下,您需要这样做。 您希望外壳程序看到sqlite3命令,并将另一个单词database.db作为第一个参数。这样一来,我们就不会将$cmd用双引号引起来。