鉴于此代码,我不知道如何转义反引号。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")
3 回答
料青山看我应如是
TA贡献1772条经验 获得超8个赞
用于在 Bourne shells 中'逃脱`。无需引用字符串。
MY_STRING := "something'`'something"
cmd := fmt.Sprintf("MY_ENV=%s;", MY_STRING)
out, err := exec.Command("bash", "-c", cmd).CombinedOutput()
繁花如伊
TA贡献2012条经验 获得超12个赞
反引号不需要转义 Go 就可以将其留在字符串 ( ref ) 中。
但是,bash 会将字符串外的反引号视为子 shell 语法。在 bash 中转义反引号的最简单方法是将其包含在单引号字符串中:
var MY_STRING = "'something`something'"
但是由于您在格式字符串中使用%q
,因此不会按预期运行。
Bash 需要在双引号内对反引号 ( \\\`
) 进行两次转义。在那个链接的问题中有一个完整的解释为什么这是必要的。由于 Go 还用作\
转义字符,因此您需要将每个字符加倍:
var MY_STRING = "something\\\\\\`something"
阿晨1998
TA贡献2037条经验 获得超6个赞
您可以尝试//go:embed foo.sh
将外部 shell 文件嵌入到您的代码中。像这样:
//go:embed yourshell.sh var yourshell string
将 shell 文件放在代码的同一文件夹中。
- 3 回答
- 0 关注
- 177 浏览
添加回答
举报
0/150
提交
取消