引号中的差异变量(在命令内)

时间:2012-12-03 10:20:46

标签: bash variables command quotes dereference

我在不同的环境中运行我的脚本,因此我在变量$CreateSequenceDictionary中存储我想要启动的程序的路径和名称。

此程序使用参数R=O=,因此我将整个命令放在引号“”中。没有这些,程序就会在没有任何参数的情况下启动。

现在我的问题是:我希望传递此变量的内容而不是$reference。我试过这个:

"java -jar $CreateSequenceDictionary R=$reference O=output" >mlogfile

和许多变体(如“”“eval \”)没有成功。

请问,我应该如何调整命令,以便运行存储在变量中的程序存储在变量?

中的参数

编辑:如果我应该在终端中使用命令,它将如下所示:

 java -jar /path/CreateSequenceDictionary.jar R=input O=output

但是,我想从变量中获取程序的名称,并从变量中获取输入文件的名称。

1 个答案:

答案 0 :(得分:2)

你可以在没有周围引号的情况下做到这一点。

java -jar $CreateSequenceDictionary R=$reference O=output > mlogfile

Bash将在运行命令之前扩展变量。

如果您想有条件地加入R=O=选项,可以尝试以下方法:

CreateSequenceDictionary="your_Program"
r_option ="$reference"
o_option="output"

arguments=()
[[ "$r_option" ]] && arguments+=("$r_option")
[[ "$o_option" ]] && arguments+=("$o_option")

java -jar $CreateSequenceDictionary "${arguments[@]}" > mlogfile

这会动态构建其他参数,并跳过关联的*_option变量为空的那些参数。