在 bash 中执行
sqlite3 database.db 'select * from databases'
Run Code Online (Sandbox Code Playgroud)
给了我很好的输出,但不幸的是,当我想从变量创建查询时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`
Run Code Online (Sandbox Code Playgroud)
以上都不起作用。我想要一个只执行“从数据库中选择*”这样的查询的函数。
你的麻烦是分词。当你运行这个时:
Run Code Online (Sandbox Code Playgroud)sqlite3 database.db $sql
外壳分裂$sql成文字。但sqlite3期望 SQL 命令作为单个参数。为了防止分词,必须$sql用双引号引起来:
sqlite3 database.db "$sql"
Run Code Online (Sandbox Code Playgroud)
如果您想将 存储sqlite3 database.db在名为 的变量中cmd,您可以编写:
$cmd "$sql"
Run Code Online (Sandbox Code Playgroud)
shell 将分裂$cmd成单词,在本例中您需要这样。您希望 shell 看到该sqlite3命令,并看到另一个单词database.db作为第一个参数。这样我们就不用$cmd用双引号括起来。