【问题标题】:Escape single quotes in shell invocation在 shell 调用中转义单引号
【发布时间】:2021-04-18 04:00:04
【问题描述】:

我正在尝试编写一个 systemd 服务文件,而不使用外部脚本。

我需要查询一个 sqlite 数据库并将内容写入文件。但是我的查询使用双引号,我需要将查询用单引号括起来,并且由于 systemd 不使用 shell,我需要手动使用一个。那么我该如何实现呢?

ExecStart=sh -c 'sqlite3 dbfile.db 'SELECT "The db value is: "||value FROM table' > output.log'

我尝试转义内部单引号,但由于某种原因不起作用。

【问题讨论】:

  • 将您的命令放在一个单独的脚本中,并将其名称设置为 ExecStart 值
  • 我不确定,但echo 'cmd str1' "cmd str2"...etc | sh 有效吗?您可以加入用不同引号括起来的多个字符串。甚至以其他方式,使用\ 进行常规转义应该可以,对吧?

标签: bash systemd


【解决方案1】:

试试这个:

ExecStart=sh -c 'sqlite3 dbfile.db '\''SELECT "The db value is: "||value FROM table'\'' > output.log'

我以前使用 mysql,双引号也可以。你也可以试一试:

ExecStart=sh -c 'sqlite3 dbfile.db "SELECT \"The db value is: \"||value FROM table" > output.log'

【讨论】:

  • 你能解释一下'\''是什么意思吗?转义我理解,但是翻倍了?
  • 第一个'实际上关闭了命令,让\'在整个引号中转义单引号,最后一个'连接命令的其余部分。一个更清晰的例子:'This is '\'' escaped single quote''This is ' + \' + ' escaped single quote' 组成。
猜你喜欢
  • 2014-07-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-21
  • 2018-12-27
相关资源
最近更新 更多