假设我的命令行实用程序可以发送具有以下结构的消息
struct Message {
uint32_t ip;
string id;
}
用户必须能够在ip上指定主机(ipv4 +端口)和过滤器,并且每个主机 (允许发送网络地址和ID)。我该怎么设计 清楚这种复杂选项的语法?
我发明的最好的是:
--msg-send="192.168.10.2:8080;ip_isin=10.0.0.0/8,172.16.0.1/16;id=one,two"
但它有问题......比如里面的标志=
是
很烦人...有人知道"银弹"对于具有复杂结构的命令行参数?
另一种变体更好:
--msg-send="192.168.10.2:8080{ip 10.0.0.0/8,172.168.0.0/16}{id one,two}"
UPD: msg-send是复数,用户可以使用不同的过滤器设置多个主机
答案 0 :(得分:3)
但是,在与人类互动时,你应该尝试遵循人类的思维方式。您试图让用户手动构建一个类似于JSON格式的复杂结构。人类对此不好。从你的解释我得到这个结构有三个组成部分:
因此,要求用户单独输入这些参数可能是合乎逻辑的,例如
msg_util.exe --host 192.168.10.2:8080 --allowed_ips 10.0.0.0/8,172.16.0.1/16 --allowed_ids one,two
如果您的许多主机可能具有相应的允许IP和ID,那么单独从命令行输入它是非常尴尬的,并且许多网络实用程序(如dig)使用来自文件。例如,您可以
msg_util.exe --file --host hosts_file --allowed_ips ips_file --allowed_ids ids_file
其中hosts_file
的每一行都有ips_file
和ids_file