Shell脚本处理接口返回JSON字段时如何正确添加自定义前缀
实现目标的解决方案
问题根因
输出异常来自两个问题:
- 调用
jq .field提取字段时,jq默认会给字符串类型的输出包裹双引号,因此/root/file.txt中存储的内容本身自带首尾双引号 - 拼接变量时你没有在
prefix和val之间添加空格,导致前缀和原值直接连在一起
最优解决方案(无需额外编写file2.sh)
直接修改crontab任务,借助jq原生能力一步完成前缀拼接和输出格式处理:
* * * * * /root/file.sh | jq -r '"start " + .field' > /root/file.txt 2>&1
参数说明:
-r参数代表输出原始字符串,会自动去掉jq默认添加的外层双引号- 直接在jq语句中完成前缀拼接,额外加的空格可以保证前缀和字段值之间的分隔
- 执行后
/root/file.txt中存储的内容就是你预期的start value from file.txt,如果需要外层包裹双引号,修改jq语句为jq -r '"\"start " + .field + "\""'即可
如果你需要保留原有file2.sh的处理流程
修改file2.sh的代码,先去除读取内容的首尾引号,再添加空格拼接:
prefix="start" # 读取文件并去除首尾双引号 val=$(sed -e 's/^"//' -e 's/"$//' /root/file.txt) # 拼接时添加空格 concat="${prefix} ${val}" # 如果需要外层包裹双引号,使用echo "\"${concat}\"" echo ${concat}
内容的提问来源于stack exchange,提问作者harry123
相关产品推荐
相关产品推荐

