我有一个在 Bash 脚本中运行的 SQL 语句。它包含连续两个美元符号的实例,例如:
psql -U $username -h $DATABASE_HOST $DATABASE_NAME -c "DO $$ DECLARE myVar varchar; END$$"
Run Code Online (Sandbox Code Playgroud)
怎样才能摆脱这两种情况呢?
只需在每个前面加一个反斜杠即可:
psql -U "$username" -h "$DATABASE_HOST" "$DATABASE_NAME" -c \
"DO \$\$ DECLARE myVar varchar; END\$\$"
Run Code Online (Sandbox Code Playgroud)
(实际上,由于第二个$后面跟着空格,shell 不会尝试扩展它,但第二个反斜杠不会造成伤害)。
或者,在字符串周围使用单引号,以便 shell 按字面解释它:
psql -U "$username" -h "$DATABASE_HOST" "$DATABASE_NAME" -c \
'DO $$ DECLARE myVar varchar; END$$'
Run Code Online (Sandbox Code Playgroud)
正如Biffen在评论中所说,始终引用变量是一个好习惯。
如果您发现$$仍在扩展,那么我猜这段代码被解析了两次。在这种情况下,您需要\\\$\\\$在双引号内进行双转义 ( ),或\$\$在单引号内使用(或者更好的是,如果不需要,请避免解析两次)。
| 归档时间: |
|
| 查看次数: |
738 次 |
| 最近记录: |