You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Bash脚本执行命令创建PSQL用户并解决引号嵌套问题

问题原因

你的命令失效的核心确实是引号嵌套解析错误:bash -c 的参数外层使用了单引号,内部 psql -c 的参数用了双引号,到密码前的双引号时就已经提前闭合了 psql 的参数引号,qwerty 直接变成了bash层面的独立字符串,整个命令解析完全不符合预期。

可行的实现方案

方案1:最简写法(无多余嵌套)

无需额外套一层bash -c,直接用sudo切换用户后执行psql,用heredoc传入SQL语句,完全避免引号冲突:

sudo -H -u postgres psql <<EOF
CREATE USER admin WITH PASSWORD 'qwerty';
EOF

方案2:保留bash -c结构(适合多命令场景)

如果确实需要在bash -c里执行多条命令,可以用双引号包裹外层参数,内部双引号加反斜杠转义:

sudo -H -u postgres bash -c "psql -c \"CREATE USER admin WITH PASSWORD 'qwerty';\""

也可以用bash单引号嵌套的标准写法'\''处理内部引号:

sudo -H -u postgres bash -c 'psql -c "CREATE USER admin WITH PASSWORD '\''qwerty'\'';"'

方案3:安全传参写法(适配含特殊字符的密码)

如果密码包含单引号、反斜杠等特殊字符,推荐用psql变量传递的写法,既避免引号冲突也能防范SQL注入风险:

DB_PASS="你的自定义密码"
sudo -H -u postgres psql -v dbpass="$DB_PASS" <<EOF
CREATE USER admin WITH PASSWORD :'dbpass';
EOF

内容的提问来源于stack exchange,提问作者Tom

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 15:21:01