我有一个类似数组的字符串'[ "tag1", "tag2", "tag3" ]'
,需要将其转换为bash数组。如何实现这一目标?
答案 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