如何在Bash中使用包含换行符的字符串列表转换变量,像这样
groups="group_1
group_2
group_3"
到JSON字符串数组:
{
[ "group_1", "group_2", "group 3" ]
}
jq有可能吗?
如果您的jq有,inputs
那么最简单的方法可能是使用它:
jq -ncR '[inputs]' <<< "$groups"
["group1","group2","group3"]
否则,这里有三种选择:
jq -c -n --arg groups "$groups" '$groups | split("\n")'
echo -n "$groups" | jq -cRs 'split("\n")'
echo "$groups" | jq -R -s -c 'split("\n") | map(select(length>0))'
在任何情况下,都可以轻松地将数组合并到JSON对象中,例如,通过使用 | {groups: .}
如果您确实想产生无效的JSON,请考虑:
printf "%s" "$groups" | jq -Rrsc 'split("\n") | "{ \(.) }"'
输出:
{ ["group_1","group_2","group_3"] }
考虑:
jq -Rsc 'split("\n")' <<< $'a\nb'
["a","b",""]
包含的原因select(length>0)
是避免在结尾加上“”。
如果$ groups包含连续的换行符,并且保留空字符串很重要,那么您可能要使用[:-1]
,例如
jq -cRs 'split("\n")[:-1]' <<< "$groups"
["group1","group2","group3"]
如果您的jq不支持[:-1]
,请明确指定0:[0:-1]
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句