是否存在公开可用的部分解决方案来解析* nix风格的命令行选项而无需预先知道密钥?
是否存在公开的部分解决方案(使用任何语言),以便在预先不知道选项密钥的情况下将* nix命令行选项解析为数据结构 。
基本上,解析像
这样的东西my-script -x ex --y=why zebra
并获取
{'x': 'ex', 'y': 'why'}
在解析之前不知道选项键是x
和y
。
我理解“命令行选项”不是定义明确的语法,并且任何此类解决方案都不会为所有输入生成所需的输出,但我想知道是否已知任何此类部分解决方案。
最佳答案:
1 个答案:
答案 0 :(得分:3)
无法以无模式方式解析UNIX命令行选项 ,尤其是在支持GNU约定时(即允许选项和参数之间的混合)。
考虑一下你在这里给出的用法:
my-script -x ex --y=why zebra
现在,应该是:
{options: {x: "ex", y: "why"}; arguments=["zebra"]}
......或者应该是......
{options: {x: True, y: "why"}; arguments=["ex", "zebra"]}
答案是,在不知道x
是否接受参数的情况下,您不知道 - 这意味着您需要一个模式。
还要考虑:
nice -n -1
-1
是-n
的参数,还是1
的关键值?再说一遍,你无法说出来。
因此:存在Schemaless命令行解析器,但是没有涵盖足够广泛有用的案例 - 因此通常在使用它们的程序中被隔离,而不是被构建到库中。
顺便说一句,bash(4.0或更新版本)中的典型无模式命令行解析器可能如下所示:
# put key/value pairs into kwargs, other arguments into args
declare -A kwargs=( )
args=( )
args_only=0
for arg; do
if (( args_only )); then
args =( "$arg" )
continue
fi
case $arg in
--) args_only=1 ;;
--*=*)
arg=${arg#--}
kwargs[${arg%%=*}]=${arg#*=}
;;
--*) kwargs[${arg#--}]=1 ;;
-*) kwargs[${arg#-}]=1 ;;
*) args =( "$arg" ) ;;
esac
done
这适用于......
my-script --x=ex --y=why zebra
...产生值:
args=( zebra )
kwargs=( [x]=ex [y]=why )
......还有一些更有趣的有用案例,但距离处理一般情况还有很长的路要走。
本文经用户投稿或网站收集转载,如有侵权请联系本站。