用于解析参数的bash工具
我有一个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
$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"'