如何在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
相关产品推荐
相关产品推荐

