0

有一个名为 的可执行文件app,它可以接受一些选项和命令行参数,-l -v等等。现在我正在编写一个bash脚本,其中app将使用一些选项进行调用,我是这样做的,

opt_string="-l -v"  # this string might change according to different conditions used in if-else

# HERE is my problem
./app ${opt_string}

看看我是如何调用app的,通常我只是在提示 shell 中调用它,如下所示:

./app -l -v

但是现在在这个脚本中,它实际上是这样的吗:

./app "-l -v"

因为${opt_string}是 STRING 引用的"",如果是这样我怀疑是否app会正常运行。

我知道使用 可能有办法解决这个问题eval "./app ${opt_string}",但是有什么办法可以去掉""

4

2 回答 2

2

BASH 常见问题解答条目 #50:“我正在尝试将命令放入变量中,但复杂的情况总是失败!”

opt_string=(-l -v)

./app "${opt_string[@]}"
于 2013-01-16T09:43:06.757 回答
1

您调用 ( ./app ${opt_string}) 的方式很好。您定义opt_string为单个字符串,因为您引用了赋值中的值。但是,当您取消引用它时,您没有使用引号,因此 shell 将替换它的值,然后将其拆分为单个单词。

当你说

./app "$opt_string"

您正在将一个参数传递给应用程序。当你说

./app $opt_string

您正在向应用程序传递多个参数。

请参阅bash 手册中的分词。

请注意,大括号不是引号。花括号(在这种情况下)仅用于消除变量名称与周围文本的歧义,即echo "$opt_string_blah"echo "${opt_string}_blah"

于 2013-01-16T14:41:27.267 回答