将python列表转换为bash数组

2024-04-24 13:52:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个python列表作为字符串,其结构如下:

var="["127.0.0.1:14550","127.0.0.1:14551"]"

我想将字符串转换为bash数组,以便能够使用bash循环:

for ip in ${var[@]}; do

something

done

Tags: 字符串inipbash列表forvar数组
2条回答

一个选项是将字符串视为,并使用对其进行解析:

jq -rc '.[]' <<< '["127.0.0.1:14550","127.0.0.1:14551"]' | while read i; do
    echo $i
done

127.0.0.1:14550

127.0.0.1:14551

使用Perl解析Python输出,如下所示(注意字符串周围的单引号,其中包含双引号):

array=( $( echo '["127.0.0.1:14550","127.0.0.1:14551"]' | perl -F'[^\d.:]' -lane 'print for grep /./, @F;' ) )
echo ${array[*]}

输出:

127.0.0.1:14550 127.0.0.1:14551

或者,使用jq,如0stone0的答案中所示,或者通过xargs管道输出,这会删除引号,如下所示:

array=( $( echo '["127.0.0.1:14550","127.0.0.1:14551"]' | jq -c '.[]' | xargs ) )

Perl one liner使用以下命令行标志:
-e:告诉Perl在线查找代码,而不是在文件中。
-n:一次循环输入一行,默认情况下将其分配给$_
-l:在内联执行代码之前,去除输入行分隔符("\n"默认为*NIX),并在打印时追加它。
-a:在空格或{}选项中指定的正则表达式上将{}拆分为数组{}。
-F'[^\d.:]':在除数字、句点或冒号以外的任何字符(而不是空格)上拆分为@F

print for grep /./, @F;:将行拆分为字符串数组@F,选择仅使用grep非空字符串,每行打印一个

另请参见:
^{}: how to execute the Perl interpreter: command line switches

相关问题 更多 >