我正在尝试使用 bash 从命令行向 SQLite 发送查询。我需要转义单引号和双引号,并转义它们,以便 bash 不会误解它们。这是一个典型的查询:
select * from contacts where source = "Nancy's notes";
如何从命令行发送此查询?基本语法是这样的:
sqlite3.bin contacts.db 'select * from contacts where source = "Nancy's notes"'
但在这种情况下,shell 会误解单引号或双引号。我尝试过使用双斜杠和三斜杠进行转义,但这不起作用。我很困惑。有什么建议么?
MarkusQ 解决方案的问题在于知道双引号内哪些字符是特殊的 - 双引号中有很多字符,包括反引号、美元开括号、美元变量等。
我建议最好将字符串括在单引号内;然后,字符串中的每个单引号都需要替换为序列 quote、反斜杠、quote、quote:
sqlite3.bin contacts.db 'select * from contacts
where source = "Nancy'\''s notes"'
替换中的第一个引号终止当前单引号字符串;反斜杠引号代表一个单引号,最后一个引号开始一个新的单引号字符串。此外,这通常适用于 Bourne、Korn、Bash 和 POSIX shell。 (C Shell 及其衍生版本具有更复杂的规则,需要反斜杠来转义换行符,等等。)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)