一下子逃脱两个美元符号

时间:2018-04-12 08:17:56

标签: bash

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

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

如何逃脱这两件事?

1 个答案:

答案 0 :(得分:4)

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

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一样,总是引用你的变量是个好习惯。

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