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

Bash引号转义问题:执行Shell时的转义处理

解决Shell脚本中JSON参数的jq处理转义问题

问题根源

你原来的写法错误在于嵌套sh -c时的引号转义和参数传递逻辑:单引号内部的转义符\不会生效,导致子shell里的$1无法正确引用脚本传入的JSON参数,反而被当作字符串字面量处理。

最优解决方案(无需嵌套sh -c)

直接在脚本里处理参数,避免不必要的子shell嵌套,这是最简洁可靠的方式:

# 方法1:用echo管道
final=$(echo "$1" | jq -r ".[]")

# 方法2:用here-string更高效(避免创建echo进程)
final=$(jq -r ".[]" <<< "$1")

若必须使用sh -c的正确写法

如果确实需要通过sh -c执行(比如复杂场景下的子shell调用),要通过sh -c的后续参数传递变量,而不是在命令字符串里拼接:

final=$(sh -c 'echo "$1" | jq -r ".[]"' _ "$1")

这里的_是占位符,对应子shell的$0(脚本名位置),后面的"$1"才会被子shell识别为自己的$1参数,完美传递JSON内容且不会出现转义问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 00:02:34