3

我有一个 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

一个理想的解决方案将允许我只列出我想要检查标志的变量。

有没有一种相当不错的方法来做到这一点?


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

4

1 回答 1

1

您可以使用 eval 来做一些接近的事情:

foo=fooDefault
bar=barDefault

for arg in "$@"; do
    eval ${arg}
done

此版本不使用前导破折号,因此您可以将其运行为:

myscript foo=newvalue

话虽如此,但要注意几句。因为我们使用的是 eval,所以调用者可以将他们想要的任何代码/数据注入到您的脚本中。如果你需要你的代码是安全的,你将不得不${arg}在你之前验证eval它。

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

myscript foo='"with sapces"'
于 2010-05-17T17:58:44.470 回答