将Python数据列表转换为bash数组

alt*_*tus 11 arrays bash list

我有一个调用python脚本的bash脚本,如下所示:

OUTPUT=$(python /path/path/script.py attr attr attr);
Run Code Online (Sandbox Code Playgroud)

python脚本将返回如下数据列表:

[item1, item2, item3]
Run Code Online (Sandbox Code Playgroud)

如何将$ OUPUT变量(返回python数据列表的字符串)转换为bash数组?

如果可能的话,我想用bash阅读每个项目.

Cyr*_*rus 27

添加()| tr -d '[],':

OUTPUT=($(python /path/path/script.py attr attr attr | tr -d '[],'))

echo ${OUTPUT[0]}
echo ${OUTPUT[1]}
echo ${OUTPUT[2]}
echo ${OUTPUT[@]}
Run Code Online (Sandbox Code Playgroud)

输出:

item1
item2
item3
item1 item2 item3
Run Code Online (Sandbox Code Playgroud)

  • +1.如果数组元素包含空格,事情会变得更复杂. (5认同)
  • 使用 bash >= 4.0 这适用于带有空格的项目:`mapfile -t OUTPUT < <(python /path/path/script.py attr attr attr | sed 's/[][]//g;s/, / \n/g')` (2认同)

小智 6

您可以让 script.py 打印一个用空格分隔每个项目的字符串,Bash 会将其转换为数组,或者您可以使用 Bash 将 python 脚本的返回值转换为您想要的格式。

如果您选择从 script.py 打印字符串,则可以使用以下 python 代码:

returnList = [1, 2, 3]
returnStr = ''
for item in returnList:
    returnStr += str(item)+' '
print(returnStr)
Run Code Online (Sandbox Code Playgroud)

在这种情况下,以下 bash 脚本的输出:

OUTPUT=$(python /path/to/script.py)
echo $OUTPUT
for i in $OUTPUT;
do
    echo $i
done
Run Code Online (Sandbox Code Playgroud)

是:

1 2 3
1
2
3
Run Code Online (Sandbox Code Playgroud)

希望这对您有帮助。