bash数组 - 访问元素

时间:2013-02-04 10:34:47

标签: arrays bash parsing

我需要从bash中的json字符串中提取一些信息。 json字符串就像

{"ok":true,"id":"af1aa5cef5dc0c86fd734ff3d42a8188","rev":"1-f28941b049d7d356ae113fa061ddfe1f"}

(来自couchdb插入的输出)

我想抓住id,所以我试着

$IFS=;,\" 
json=tail -n1 output
echo $json 
\\ { ok  true  id   af1aa5cef5dc0c86fd734ff3d42a8188   rev   1-f28941b049d7d356ae113fa061ddfe1f }

所以,到目前为止,一切看起来都很好,但是,如果我尝试访问一个元素,$ {json [0]}将返回整个字符串,而所有其他$ {json [n]}都是空的。

另一方面,

for i in $json;
 do echo $i
done

使用$ json ...

的每个元素

我一定是做错了什么,但是什么?

(是的,我知道这种json字符串的“解析”会让我遇到一些稍微复杂的问题 - 但对于这些字符串它应该可以正常工作 - 我想)

2 个答案:

答案 0 :(得分:2)

要分配给数组,必须使用括号。捕获tail输出的行也无效,BTW。

json=( $(tail -n1 output) )
echo "${json[2]}"

答案 1 :(得分:1)

您可以使用awk:

$ echo '"ok":true,"id":"af1aa5cef5dc0c86fd734ff3d42a8188","rev":"1-f28941b049d7d356ae113fa061ddfe1f"}' | awk -F, '{ print $2 }'
"id":"af1aa5cef5dc0c86fd734ff3d42a8188"

您还可以使用awk

两个分隔符
 $ awk -F'[,:]' '{ print $4 }' your_json_file.json
"af1aa5cef5dc0c86fd734ff3d42a8188"