将不带引号的列表参数传递给脚本

时间:2019-02-20 11:00:08

标签: python parsing argv

Python脚本将传递给它的每个命令行参数都视为字符串。理想情况下,我们应该使用一些标准的解析器来解析命令行参数,但是我正在尝试sys.argv

如果我们使用/usr/local/bin/somemodule 1.2.3.4 11.22.33.44 111.222.333.444 1.2.3.4 [1.2.3.4,1.2.3.4] [sub.domain.com,sub2.domain.com,sub3.domain.com] somestring 来解析以下参数:

sys.argv[1:]

当我打印['1.2.3.4', '11.22.33.44', '111.222.333.444', '1.2.3.4', '1', '1', '2', 'somestring'时,我得到一个带有另外一个参数的列表

'1'

此行为不一致。知道为什么列表会转换为{{1}}吗?

1 个答案:

答案 0 :(得分:2)

[string]是不带引号的Shell通配符,它​​匹配名称为strin的文件或g

显然,当前目录中有一个名为1的文件,并且您尝试使用的真实通配符与之匹配。

这可能很难诊断或重现,因为如果没有匹配的文件,外壳程序(在大多数平台上为默认配置)将逐字通过通配符。

课程基本上是always quote shell expressions which contain nontrivial strings.