如何通过bash shell转义SQLite中的字符?

前端之家收集整理的这篇文章主要介绍了如何通过bash shell转义SQLite中的字符?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我试图使用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和派生词有更复杂的规则需要反斜杠来逃避换行,等等.)

猜你在找的Bash相关文章