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

如何在Bash中将HereDoc声明压缩为单行?

这个问题我碰到过,其实你尝试的单行HereDoc写法本身就不符合Bash的语法规范——Bash要求<<EOF后面必须紧跟换行,结束标记EOF也得单独占一行(哪怕用<<-EOF处理缩进也得换行),所以挤在一行的写法肯定无效。

给你几种可行的单行实现方案,按需选择:

方案1:直接用双引号包裹JSON字符串

这是最直观的写法,注意要转义JSON内部的双引号(因为外层是双引号,内部双引号会被当作字符串边界):

local my_var="foobar"
local json="{\"quicklock\":\"${my_var}\"}"

方案2:单引号+变量拼接(无需转义双引号)

用单引号包裹JSON的固定部分,再拼接变量的展开值,这样可以省去转义双引号的麻烦,可读性更好:

local my_var="foobar"
local json='{"quicklock":"'"${my_var}"'"}'

这里的逻辑是:'{"quicklock":"' 是单引号包裹的固定字符串,接着拼接 "${my_var}"(双引号包裹变量能确保特殊字符正确展开),最后拼接 '"'} 完成完整的JSON结构。

方案3:用printf命令生成(更安全的复杂场景)

如果你的my_var可能包含空格、特殊符号等内容,用printf生成会更稳妥(如果变量里有双引号这类会破坏JSON结构的字符,还需要额外转义,这里针对普通场景):

local my_var="foobar"
local json=$(printf '{"quicklock":"%s"}' "$my_var")

你可以随便选一种测试,执行echo "$json"就能看到预期的{"quicklock":"foobar"}结果啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:33:14