如何在命令行中转义可能的连字符,如下所示:
$ 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;
^
答案 0 :(得分: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
答案 1 :(得分:3)
这样做:
for i in db1 db2 db1-db2
do
su - postgres -c "psql -c \"alter database \\\"$i\\\" with connection limit = 0;\""
done
问题不在于转义连字符,问题是你在字符串中有一个字符串。因此,你必须为su命令转义一次,为psql命令转义一次。
如果您不喜欢多个转义序列,请执行此操作。
for i in db1 db2 db1-db2
do
su - postgres -c "psql -c 'alter database \"$i\" with connection limit = 0;'"
done
通过使用'singelquotes和“dbl引号,你可以减少转义。; - )