尝试在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
答案 0 :(得分:3)
这有效...大多数引号都不需要:
psql -U $dbowner -h $dbserver -p $dbport -c "CREATE DATABASE $dbname WITH ENCODING='UTF8' OWNER=$dbowner TABLESPACE=$dbtablespace TEMPLATE=$dbtemplate CONNECTION LIMIT=-1;"
答案 1 :(得分:2)
使用双引号(“)。单引号(')不解释其中的shell变量。
试试吧
echo '$USER' "$USER"
请参阅man bash
。