登录
首页 >  Golang >  Go问答

Go 中的转义反引号(exec.Command 中使用的字符串)

来源:stackoverflow

时间:2024-04-10 22:21:35 205浏览 收藏

最近发现不少小伙伴都对Golang很感兴趣,所以今天继续给大家介绍Golang相关的知识,本文《Go 中的转义反引号(exec.Command 中使用的字符串)》主要内容涉及到等等知识点,希望能帮到你!当然如果阅读本文时存在不同想法,可以在评论中表达,但是请勿使用过激的措辞~

问题内容

鉴于此代码,我无法弄清楚如何转义反引号。

var (
    my_string = "something`something"
)
cmd := fmt.sprintf("my_env=%q;", my_string)
out, err := exec.command("bash", "-c", cmd).combinedoutput()
// results in my_env="something`something" ie unfinished input

我尝试了以下方法,但结果是“未知的转义序列”。显然它在 shell 中确实有效。我还尝试组合字符串和原始字符串文字,但没有成功。请问我怎样才能避免反引号?

var (
    MY_STRING = "something\`something"
)

解决方案


在 bourne shell 中使用 ' 转义 `。并且不需要引用字符串。

my_string := "something'`'something"
cmd := fmt.sprintf("my_env=%s;", my_string)
out, err := exec.command("bash", "-c", cmd).combinedoutput()

go 不需要转义反引号即可将其保留在字符串中 (ref)。

但是,bash 会将字符串外部的反引号视为 subshell syntax。在 bash 中转义反引号的最简单方法是将其包含在 single-quoted string 中:

var my_string = "'something`something'"

但是由于您在格式字符串中使用了 %q,因此这不会按预期运行。

相反,您可以使用 this question 上发布的解决方案。bash 要求在双引号内对反引号 (\\\`) 进行双重转义。在该链接的问题中有一个完整的解释为什么这是必要的。由于 go 还使用 \ 作为转义字符,因此您需要将每个字符加倍:

var MY_STRING = "something\\\\\\`something"

今天带大家了解了的相关知识,希望对你有所帮助;关于Golang的技术知识我们会一点点深入介绍,欢迎大家关注golang学习网公众号,一起学习编程~

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>