3

尝试在 psql 命令中插入 bash 变量作为连接参数以及命令本身中的变量时,我快疯了。以下示例正常工作:

psql -U postgres -h localhost -p 5432 -c "CREATE DATABASE  testdb WITH ENCODING='UTF8' OWNER=postgres TABLESPACE=pg_default TEMPLATE=template_postgis CONNECTION LIMIT=-1;"

现在我试图通过一个变量来交换每个参数,该变量保存在特殊的配置文件中。

非工作示例:

dbserver=localhost
dbport=5432
dbowner=postgres
dbname=testdb
dbtemplate=template_postgis
dbtablespace=pg_default

 psql -U '$dbowner' -h '$dbserver' -p '$dbport' -c "CREATE DATABASE  '$dbname' WITH ENCODING='UTF8' OWNER='§dbowner' TABLESPACE='$dbtablespace' TEMPLATE='$dbtemplate'
CONNECTION LIMIT=-1;"

我已经尝试了几个引用、反引号和转义斜线,但它仍然无法正常工作。在此先感谢,knutella

4

2 回答 2

3

使用双引号 (")。单引号 (') 不会解释里面的 shell 变量。

试试看

 echo '$USER' "$USER"

man bash

于 2013-05-14T11:47:06.250 回答
3

这行得通...不需要大多数引号:

 psql -U $dbowner -h $dbserver -p $dbport -c "CREATE DATABASE  $dbname WITH ENCODING='UTF8' OWNER=$dbowner TABLESPACE=$dbtablespace TEMPLATE=$dbtemplate CONNECTION LIMIT=-1;"
于 2013-05-14T11:49:19.987 回答