Bash:如何将类数组的字符串转换为数组

时间:2015-12-10 06:58:52

标签: linux bash shell

我有一个类似数组的字符串'[ "tag1", "tag2", "tag3" ]',需要将其转换为bash数组。如何实现这一目标?

2 个答案:

答案 0 :(得分:2)

如您所知,数组在bash中声明如下:

arr=(one two three elements)

因此,让我们尝试将您的输入转换为bash数组。如果不解析输入,这可能非常容易出错,并且由于使用了eval,在处理可变用户输入时会非常不安全。

然而,这是一个起点:

t='[ "tag1", "tag2", "tag3" ]'
# strip white space
t=${t// /}
# substitute , with space
t=${t//,/ }
# remove [ and ]
t=${t##[}
t=${t%]}
# create an array
eval a=($t)

在控制台上运行时,会产生:

$ echo ${a[2]}
tag3

答案 1 :(得分:0)

源格式类似于python列表。 使用python进行中间处理:

$ src='[ "tag1", "tag2", "tag,\" 3" ]' # With embedded double quotes, spaces and comma for example.
$ IFS=$'\n' bash_array=($(python <<< 'a='"$src"$'\n''for t in a: print(t)'))
$ printf "%s\n" ${bash_array[@]}
tag1
tag2
tag,"3