如何拆分psql连接字符串为多行且可被Postgres正常识别
错误原因说明
+号拼接写法完全不可行:Shell 原生不支持用+做字符串拼接,该符号会被当做普通参数直接传给 psql,完全不符合命令语法规则。- 反斜杠拆分的写法错误点:你将连接参数拆成了多个独立的双引号包裹片段,Shell 会把它们解析为多个独立的位置参数传给 psql,psql 只会把第一个片段当做连接串,剩余片段识别为非法参数,自然无法建立连接。
可行的多行拆分方案
方案1:双引号包裹整串,内部用反斜杠换行
所有连接参数统一放在同一个双引号内部,换行转义符写在引号里,Shell 会自动将多行内容拼接为完整的单个连接串参数传给 psql:
psql "password='${INPUT_PASSWORD}' \ dbname=analytics \ host='${INPUT_HOST}' \ user=analytics \ port=32648"
注意:反斜杠后不能加任何空格,否则空格会被带入连接串导致参数识别错误
方案2:拆分使用psql独立参数(更推荐)
psql 原生支持独立参数指定连接配置,无需拼接长连接串,可读性和可维护性更高,也不需要处理引号嵌套问题:
PGPASSWORD=${INPUT_PASSWORD} psql \ -d analytics \ -h ${INPUT_HOST} \ -U analytics \ -p 32648
内容的提问来源于stack exchange,提问作者Doug Fir
相关产品推荐
相关产品推荐

