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

Passing list argument without quotes to a script

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

如果我们使用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'?

不加引号,[string] 是一个 shell 通配符,匹配名称为 stri 的文件或 ng.

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

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

教训是基本上always quote shell expressions which contain nontrivial strings.