我有一个我在Bash脚本中运行的SQL语句。它包含连续两个美元符号的实例,例如:
psql -U $username -h $DATABASE_HOST $DATABASE_NAME -c "DO $$ DECLARE myVar varchar; END$$"
如何逃脱这两件事?
答案 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一样,总是引用你的变量是个好习惯。
如果您发现$$
仍在扩展,那么我猜这个代码正在被解析两次。在这种情况下,您需要在双引号内双重转义(\\\$\\\$
),或在单引号内使用\$\$
(或者更好,如果您不需要,请避免解析它两次)