我试图使用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解决方案的问题在于知道哪些字符在双引号内是特殊的 - 它们中有很多字符,包括反向标记,美元开括号,美元变量等.
我建议最好将字符串括在单引号内; 那么,字符串中的每个单引号都需要被序列引号,反斜杠,引号,引号替换:
sqlite3.bin contacts.db 'select * from contacts where source = "Nancy'\''s notes"'
替换中的第一个引号终止当前的单引号字符串; 反斜杠引用表示文字单引号,最终引号启动一个新的单引号字符串.此外,这适用于Bourne,Korn,Bash和POSIX shell.(C Shell和派生词有更复杂的规则需要反斜杠来逃避换行,等等.)