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

Shell脚本问题:IFS拆分含连字符字符串时提前终止

修复Shell脚本提取JSON键值对的问题

你的问题根源有两个:

  • read命令语法错误:-d参数需要指定单个字符作为输入终止符,你写的-d -r会把-当成终止符,所以读取到abc-de里的-就提前停止,导致内容截断。
  • 用纯字符串拆分JSON的思路不可靠:JSON结构中的逗号可能出现在字符串(比如value字段)内部,直接按逗号拆分会破坏合法的字段内容。

正确解决方案:用专门的JSON工具jq处理

jq是Shell环境下处理JSON的标准工具,能可靠解析JSON结构,不会被字段内的特殊字符干扰。

1. 提取所有键值对

执行以下命令可以直接输出每个key=value的行:

jq -r '.[] | "\(.key)=\(.value)"' vars.txt

输出结果:

testvar1=abc
testvar2=abc-de

2. 将键值对导入Shell环境

如果需要把这些变量直接在Shell中使用,可以用循环读取并导出:

while IFS="=" read -r key value; do
    export "$key=$value"
done < <(jq -r '.[] | "\(.key)=\(.value)"' vars.txt)

执行后,你可以直接通过echo $testvar1、echo $testvar2获取对应的值。

安装jq(如果系统未预装)

  • Debian/Ubuntu系:sudo apt install jq
  • CentOS/RHEL系:sudo yum install jq

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 13:17:22