【问题标题】:Escaping two dollar signs at once一次转义两个美元符号
【发布时间】:2018-04-12 16:32:46
【问题描述】:

我有一个在我的 Bash 脚本中运行的 SQL 语句。它包含连续两个美元符号的实例,例如:

psql -U $username -h $DATABASE_HOST $DATABASE_NAME -c "DO $$ DECLARE myVar varchar; END$$"

如何才能逃脱这两者?

【问题讨论】:

  • \$$ 应该这样做,只要第二个后面没有字母数字字符。
  • …并引用你的变量!

标签: bash


【解决方案1】:

在每一个前面加一个反斜杠:

psql -U "$username" -h "$DATABASE_HOST" "$DATABASE_NAME" -c \
  "DO \$\$ DECLARE myVar varchar; END\$\$"

(实际上,由于第二个$后面是空格,所以shell不会尝试扩展它,但第二个反斜杠并没有坏处。

或者,在字符串周围使用单引号,以便 shell 按字面意思解释:

psql -U "$username" -h "$DATABASE_HOST" "$DATABASE_NAME" -c \
  'DO $$ DECLARE myVar varchar; END$$'

就像 Biffen 在 cmets 中所说,总是引用你的变量是一个好习惯。

如果您发现$$ 仍在扩展中,那么我猜想这段代码被解析了两次。在这种情况下,您需要在双引号内使用双重转义 (\\\$\\\$),或在单引号内使用 \$\$(或者更好的是,如果不需要,请避免解析两次)。

【讨论】:

  • 感谢您的回复。收到以下错误:第 1 行:DO 21563 DECLARE
  • 这整件事是否包含在其他双引号、heredoc 或其他内容中?
  • 啊,抱歉。是的,为了让脚本结果进入一个包含在 `` 中的变量。我现在意识到我可以在每个 $ 之前加上双斜杠。再次感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-06-17
  • 2021-07-01
  • 1970-01-01
  • 2022-11-22
  • 2023-03-30
  • 2021-04-25
  • 2017-02-19
相关资源
最近更新 更多