bash 字符串连接中的多余空间
Posted
技术标签:
【中文标题】bash 字符串连接中的多余空间【英文标题】:Undesirable space in bash string concatenation 【发布时间】:2022-01-07 11:45:34 【问题描述】:我无法弄清楚我的以下 bash 脚本有什么问题:
#!/bin/bash
function jsonValue()
key=$1
num=$2
awk -F"[,:]" 'for(i=1;i<=NF;i++)if($i~/'$key'\042/)print $(i+1)' | tr -d '"' | sed -n $nump
json='"_id": "dummy_id","title": "dummy_title"'
id=$(echo $json | jsonValue _id)
title=$(echo $json | jsonValue title)
echo $id/$title
结果是:
dummy_id title/ dummy_title
函数结果不包含空格。 你知道这个函数有什么问题吗?
【问题讨论】:
您没有在 FS 中包含空格,因此该字段为' "dummy_title"'
(带有前导空格)。
似乎是jq
的工作。
您应该将该脚本复制/粘贴到shellcheck.net 并修复它会告诉您的问题。另请参阅how-do-i-use-shell-variables-in-an-awk-script。
拥有json='"_id": "1", "title": "this, is; a \"title\" 1"'
后你会怎么做?
【参考方案1】:
你知道这个函数有什么问题吗?
问题在于您的解析器非常糟糕,并且无法处理在 :
和值的开头之间有任何空格的 JSON 字符串。它也不处理值中嵌入的,
;
"
。
不要重新发明*** - JSON 是一种众所周知的格式。使用旨在处理 JSON 的工具和库。使用jq
,使用 Python 或 Perl。
【讨论】:
你是对的,通常我使用 jq 来解决问题,但我只有一个 bash env 来解决问题,所以我无法安装它。此功能可能仅适用于这项工作。 对于 10000% 你有 perl,还有github.com/step-/JSON.awk @KamilCuk : "使用 jq,使用 Python 或 Perl" 或 Ruby :-D以上是关于bash 字符串连接中的多余空间的主要内容,如果未能解决你的问题,请参考以下文章