用于解析参数的bash工具

用于解析参数的bash工具,bash,command-line-arguments,Bash,Command Line Arguments,我有一个bash脚本,它使用了一些变量(称它们为$foo和$bar)。现在,脚本在顶部用如下硬编码值定义它们: foo=fooDefault bar=barDefault .... # use $foo and $bar 我想要的是能够像以下任何一种那样使用脚本: myscript # use all defaults myscript -foo=altFoo # use default bar myscript -bar=altBar # use defau

我有一个bash脚本,它使用了一些变量(称它们为
$foo
$bar
)。现在,脚本在顶部用如下硬编码值定义它们:

foo=fooDefault
bar=barDefault

....

# use $foo and $bar
我想要的是能够像以下任何一种那样使用脚本:

myscript              # use all defaults
myscript -foo=altFoo  # use default bar
myscript -bar=altBar  # use default foo
myscript -bar=altBar -foo=altFoo
理想的解决方案是只列出要检查标志的变量

有没有一个相当好的方法可以做到这一点



我已经看到,我认为它可能会完成我所寻找的70%的功能,但我想知道是否有一种工具或铟建立在它之上,或者类似的东西可以获得其余的功能。

您可以使用eval来完成一些接近的工作:

foo=fooDefault
bar=barDefault

for arg in "$@"; do
    eval ${arg}
done
此版本不需要前导破折号,因此您可以按以下方式运行它:

myscript foo=newvalue
话虽如此,但还是要小心几句。因为我们使用eval,所以调用方可以将他们想要的任何代码/数据注入到脚本中。如果您需要确保代码的安全,则必须先验证
${arg}
,然后才能
评估它。

此外,如果您的数据中需要空格,这也不是很优雅,因为您必须对它们进行双引号(一次用于命令行,第二次用于内部
eval
):


getopts是迄今为止我发现的最好的。这有点特殊,但很适合我的需要。你检查过了吗?看起来和你的相似need@bobah:非常相关,事实上可能是我要找的东西的一个组成部分,但我要找更专业的东西。另外,我正在寻找一个剪切粘贴解决方案,因为我现在所拥有的已经足够好了。请确保您知道Bash内置
getopts
(仅限短选项)和外部可执行文件(长选项和短选项)之间的区别。建议避免后者。
myscript foo='"with sapces"'