Bash脚本中的Sqlite3多个参数

时间:2014-03-29 22:15:36

标签: bash shell sqlite

我是sqlite3的新手,但我已经开始了解它。我正在创建一个简单的基于命令行的工具来从数据库中删除条目。我使用的命令在交互模式下工作正常。它看起来像这样:

sqlite3 db.sqlite
SQLite version 3.7.12 2012-04-03 19:43:07
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> SELECT computer_name FROM machine WHERE serial_number = "C02JT0XXXXXX";
MacBook01

但是当我尝试将它放在shell命令中时,它不起作用:

$ sqlite3 db.sqlite "SELECT computer_name FROM machine WHERE serial_number = "C02JT0XXXXXX";"
Error: no such column: C02JT0XXXXXX

奇怪的是当我使用不同的论点时,DOES工作:

$ sqlite3 db.sqlite "SELECT computer_name FROM machine WHERE id = "1";"
MacBook01

如果第二个参数长于1个字符,则表示失败。我也尝试了其他几个,他们给了我同样的错误。

我做错了什么?

谢谢!

2 个答案:

答案 0 :(得分:2)

在bash中,您的第一个表达式变为SELECT computer_name FROM machine WHERE serial_number = C02JT0XXXXXX; - 有效地删除了引号。 id = 1这是可以的,因为这是一个数字比较。对于字符串"C02JT0XXXXXX",它会导致问题。试试单引号:

sqlite3 db.sqlite 'SELECT computer_name FROM machine WHERE serial_number = "C02JT0XXXXXX";'

答案 1 :(得分:1)

您已经在使用这些报价。

sqlite3 db.sqlite 'SELECT computer_name FROM machine WHERE serial_number = "C02JT0XXXXXX";'

sqlite3 db.sqlite 'SELECT computer_name FROM machine WHERE serial_number = "'"C02JT0XXXXXX"'";'