如何在adb shell中执行一行带嵌套字符串的sqlite3查询命令?

ifmq2ha2  于 2022-12-27  发布在  SQLite
关注(0)|答案(1)|浏览(188)

我想执行一个单行命令的SQLite 3与嵌套字符串从adb shell 。
以下命令起作用:

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,而不是数字。因此,选择命令以(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
hiz5n14c

hiz5n14c1#

我自己解决的:

adb shell su -c "sqlite3 /data/data/com.android.providers.telephony/databases/mmssms.db \"SELECT * FROM sms WHERE address=\"\\\"+0012345\"\\\"\"\"\";"

去数字:)

相关问题