传递给可执行文件的选项或参数由“”引用

时间:2013-01-16 08:55:21

标签: shell

有一个名为app的executbale,它可以采用一些选项和命令行参数,-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"

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

我知道使用eval "./app ${opt_string}"可能有办法解决这个问题,但有没有办法剥离""

2 个答案:

答案 0 :(得分:2)

BASH FAQ#50:"I'm trying to put a command in a variable, but the complex cases always fail!"

opt_string=(-l -v)

./app "${opt_string[@]}"

答案 1 :(得分:1)

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

当你说

./app "$opt_string"

您正在向应用传递一个参数。当你说

./app $opt_string

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

请参阅bash手册中的word splitting

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

相关问题