【发布时间】:2018-10-15 13:10:32
【问题描述】:
输入:
declare -a ForwardPort=([0]="L *:9102:10.0.1.8:9100 # remote laptop" [1]="L *:9166:8.8.8.8:9100 # google")
期望的输出
我想得到这个输出:
{
'ForwardPort': [
'"L *:9102:10.0.1.8:9100 # remote laptop"',
'"L *:9166:8.8.8.8:9100 # google"'
]
}
尝试
我试着用shlex玩了一下,但是数组的解析很糟糕:
import shlex
line='ForwardPort=([0]="L *:9102:10.0.1.8:9100 # remote laptop" [1]="L *:9166:8.8.8.8:9100 # google")'
lex=shlex.shlex(line)
list(lex)
['ForwardPort', '=', '(', '[', '0', ']', '=', '"L *:9102:10.0.1.8:9100 # remote laptop"', '[', '1', ']', '=', '"L *:9166:8.8.8.8:9100 # google"', ')']
问题
有没有办法自动将ForwardPort 的值解析成一个列表?
注意:不要在家里复制,这是一个糟糕的设计决定,导致了这个令人费解的问题:S
【问题讨论】:
-
你从哪里得到
ForwardPort?似乎您正在穿越两种不同的语言。你的“ForwardPort”是 bash 数组格式有什么原因吗? -
shlex.shlex是一个词法分析器,它会返回一个由你来解析的标记列表, -
...此外,
shlex是为 POSIX sh 定义的。 bash 不是这样的。 -
如果你只想解析单行字符串,请使用正则表达式,如果你需要上下文/多行解析,我建议使用 pyparsing
-
退后一步,是什么产生了输入?为什么它不能为 Python(或任何其他语言)生成更有用的东西?
标签: python arrays bash lexical-analysis shlex