我想用adb shell中的嵌套字符串执行SQLite 3的单行命令。
以下命令WORKS:
adb shell su -c "sqlite3 /data/data/com.android.providers.telephony/databases/mmssms.db """SELECT * FROM sms WHERE read=1""";"
但是这个命令不起作用:
adb shell su -c "sqlite3 /data/data/com.android.providers.telephony/databases/mmssms.db """SELECT * FROM sms WHERE address="+0012345" """;"
如你所知,我在'address =“+ 0012345”中更改了'read = 1''问题是SQLite 3选择的sms格式必须是TEST / STRING而不是数字。因此,select命令以(address =“)结束并且不吸收它之后的内容(+0012345”')
知道如何解决这个问题?
更新为我失败的另一个试验,但也许会给某人指示:
我试图在命令行中添加“.explain”,所以我看到sqlite3得到了什么命令。
adb shell su -c "sqlite3 /data/data/com.android.providers.telephony/databases/mmssms.db .explain \"SELECT * FROM sms WHERE address=\`\"\`\"+0012345\`\"\`\"\";\""
输出是
/system/bin/sh: ": not found
/system/bin/sh: ": not found
sqlite3: Error: too many options: "SELECT * FROM sms WHERE address="+0012345""
Use -help for a list of options.
/system/bin/sh: ": not found
所以似乎sqlite3正在按要求获得带引号“+0012345”的电话号码!但是,当我删除这样的“.explain”时
adb shell su -c "sqlite3 /data/data/com.android.providers.telephony/databases/mmssms.db \"SELECT * FROM sms WHERE address=\`\"\`\"+0012345\`\"\`\"\";\""
我得到这个输出:
/system/bin/sh: ": not found
/system/bin/sh: ": not found
/system/bin/sh: ": not found
我自己解决了:
adb shell su -c "sqlite3 /data/data/com.android.providers.telephony/databases/mmssms.db \"SELECT * FROM sms WHERE address=\"\\\"+0012345\"\\\"\"\"\";"
去搞清楚:)