如何在Bash中将for循环输出的字符串转为标准JSON数组?
解决字符串转JSON数组的问题
你的输入字符串是空格分隔的两个值,而且里面隐藏了Windows风格的回车符\r,这才导致之前的命令输出异常。下面是几个正确的处理方式:
方式一:先清除回车符再按空格分割
echo "$var" | tr -d '\r' | jq -R -c 'split(" ")'
tr -d '\r'会先把字符串里的回车符全部删掉,再用jq按空格分割成数组,就能得到预期的["something1/value1","something2/value2"]。
方式二:用jq直接处理回车符和分割
echo "$var" | jq -R -c 'gsub("\r"; "") | split(" ")'
通过jq的gsub函数去掉所有\r,再执行空格分割,效果和方式一一致。
进阶处理:兼容多连续空格/末尾空格
如果输入里可能存在多个连续空格或者末尾空格,可以用正则分割并过滤空值:
echo "$var" | jq -R -c 'gsub("\r"; "") | split(/\s+/) | map(select(length>0))'
split(/\s+/)会按任意空白字符分割,map(select(length>0))则会把分割后产生的空字符串去掉,避免数组里出现空元素。
为什么之前的命令失败?
你之前用split("\n")是按换行分割,但你的输入是空格分隔的内容,再加上输入里的\r,导致两个值被连在一起变成了一个元素,自然得不到正确结果。
内容的提问来源于stack exchange,提问作者vjancich
相关产品推荐
相关产品推荐

