如何使用撇号( ' inside " 然后在 ' 内)

发布于 2024-10-27 04:07:02 字数 863 浏览 2 评论 0 原文

我需要在 php 中通过 sudo 发出此命令。但 sudo 需要将命令放在撇号内。

psql -c "create database radek with encoding 'unicode';" -U edumate template1

所以

sudo -su postgres 'psql -c "create database radek with encoding ''unicode'';" -U edumate template1'

给了我一个错误

ERROR:  syntax error at or near "unicode"
LINE 1: create database radek with encoding unicode;
                                            ^

我会说发生错误是因为 unicode 被 ' 括起来。 sudo 命令也用 ' 括起来。

UPDATE

转义 unicode \'unicode\' 不起作用。我得到 > 并且它永远挂在那里......

UPDATE2

最终的 php 代码就像

exec("sudo -su postgres 'psql -c \"create database " . $db . " with encoding '\"'\"'unicode'\"'\"';\" -U edumate template1'", $output); 

感谢 @Matthew Scharley

I need to issue this command via sudo in php. But sudo needs to have the command inside apostrophes.

psql -c "create database radek with encoding 'unicode';" -U edumate template1

so

sudo -su postgres 'psql -c "create database radek with encoding ''unicode'';" -U edumate template1'

gives me an error

ERROR:  syntax error at or near "unicode"
LINE 1: create database radek with encoding unicode;
                                            ^

I'd say that the error happens because unicode is enclosed by '. And sudo command is enclosed by ' too.

UPDATE

escaping unicode \'unicode\' doesn't work. I get > and it hangs there for ever....

UPDATE2

the final php code is like

exec("sudo -su postgres 'psql -c \"create database " . $db . " with encoding '\"'\"'unicode'\"'\"';\" -U edumate template1'", $output); 

thanks to @Matthew Scharley

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

不念旧人 2024-11-03 04:07:02

这有点奇怪,但是双撇号所发生的情况是,它关闭了字符串,然后再次重新打开它,这让你一无所获。解决方案如下:

sudo -su postgres 'psql -c "create database radek with encoding '"'"'unicode'"'"';" -U edumate template1'

即。将撇号放在收盘价和开盘价之间的双引号内。这至少可以在 bash 类型的 shell 中工作,但我不使用其他 shell 来了解它们是如何工作的。

It's a bit weird, but what's happening with your double apostrophe is that it's closing the string then reopening it again, which gains you a net of nothing. The solution is the following:

sudo -su postgres 'psql -c "create database radek with encoding '"'"'unicode'"'"';" -U edumate template1'

ie. Put the apostrophe in double quotes between the close and open. This will work in at least bash type shells, but I don't use others to know how they work.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文