以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`
以上所有方法均无效。我希望有一个函数可以执行查询,例如“从数据库中选择*”。
答案 0 :(得分:0)
答案 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
用双引号引起来。