在bash postgresql psql命令行中转义连字符

sea*_*est 2 postgresql bash

如何在命令行中逃避可能的连字符,如下所示:

$ for i in db1 db2 db1-db2; do su - postgres -c "psql -c \"alter database \"$i\" with connection limit = 0;\""; done

ALTER DATABASE


ALTER DATABASE ERROR:  syntax error at or near "-" at character 19 LINE 1: alter database db1-db2 with connection limit = 0;
                      ^
Run Code Online (Sandbox Code Playgroud)

Dan*_*ité 5

通过在标准输入中提供SQL作为here-string,可以以某种方式减轻"引用地狱" .

在你的情况下,我认为这应该做的工作:

for i in db1 db2 db1-db2; do su - postgres -c "(psql <<EOF
alter database \"$i\" with connection limit = 0;
EOF
)"; done
Run Code Online (Sandbox Code Playgroud)

  • 您也可以将 for 循环的输出通过管道传输到 su/psql,而不是在每次循环迭代时执行 su。 (2认同)