Postgres:从 CLI 创建角色和密码,嵌套引号问题
Postgres: creating role and password from CLI, nested quotes problems
我正在尝试从 bash 创建一个 postgres 角色和密码。但是,我似乎正在为转义引号而苦苦挣扎。
运行:
$ sudo su - postgres -c '''psql -c "CREATE USER testuser WITH PASSWORD 'somepass';" '''
生产:
ERROR: syntax error at or near "somepass"
LINE 1: CREATE USER testuser WITH PASSWORD somepass;
我尝试过的其他不成功的变体;
sudo su - postgres -c """psql -c "CREATE USER testuser WITH PASSWORD 'somepass';" """
sudo su - postgres -c $''' psql -c "CREATE USER testuser WITH PASSWORD \'pass\';" '''
如何处理嵌套引号,并让 postgres 从 cli 创建角色?
'''
和 $'''
毫无意义。它们等同于 '
.
这是因为 '''foo'
被解析为空引号字符串 ''
紧跟另一个引号字符串 'foo'
,即 foo
.
要将单个 '
放入单引号 shell 字符串中,请使用 '\''
:
sudo su - postgres -c 'psql -c "CREATE USER testuser WITH PASSWORD '\''somepass'\'';"'
这样做的原因:'foo'\''bar'
被解析为带引号的部分 ('foo'
),后跟一个未加引号但反斜杠转义的字符 (\'
),然后是另一个带引号的部分 ( 'bar'
)。这些都连接起来形成 foo'bar
.
您可以使用此处文档避免所有引用问题:
#!/bin/sh
sudo su - postgres -c psql <<OMG
CREATE USER testuser WITH PASSWORD 'somepass';
-- DROP USER testuser ;
OMG
顺便说一句:您不需要 脚本,它在交互式shell 中同样有效。 (我只是用脚本测试了一下)
我正在尝试从 bash 创建一个 postgres 角色和密码。但是,我似乎正在为转义引号而苦苦挣扎。
运行:
$ sudo su - postgres -c '''psql -c "CREATE USER testuser WITH PASSWORD 'somepass';" '''
生产:
ERROR: syntax error at or near "somepass"
LINE 1: CREATE USER testuser WITH PASSWORD somepass;
我尝试过的其他不成功的变体;
sudo su - postgres -c """psql -c "CREATE USER testuser WITH PASSWORD 'somepass';" """
sudo su - postgres -c $''' psql -c "CREATE USER testuser WITH PASSWORD \'pass\';" '''
如何处理嵌套引号,并让 postgres 从 cli 创建角色?
'''
和 $'''
毫无意义。它们等同于 '
.
这是因为 '''foo'
被解析为空引号字符串 ''
紧跟另一个引号字符串 'foo'
,即 foo
.
要将单个 '
放入单引号 shell 字符串中,请使用 '\''
:
sudo su - postgres -c 'psql -c "CREATE USER testuser WITH PASSWORD '\''somepass'\'';"'
这样做的原因:'foo'\''bar'
被解析为带引号的部分 ('foo'
),后跟一个未加引号但反斜杠转义的字符 (\'
),然后是另一个带引号的部分 ( 'bar'
)。这些都连接起来形成 foo'bar
.
您可以使用此处文档避免所有引用问题:
#!/bin/sh
sudo su - postgres -c psql <<OMG
CREATE USER testuser WITH PASSWORD 'somepass';
-- DROP USER testuser ;
OMG
顺便说一句:您不需要 脚本,它在交互式shell 中同样有效。 (我只是用脚本测试了一下)