我在不同的环境中运行我的脚本,因此我在变量$CreateSequenceDictionary
中存储我想要启动的程序的路径和名称。
此程序使用参数R=
和O=
,因此我将整个命令放在引号“”中。没有这些,程序就会在没有任何参数的情况下启动。
现在我的问题是:我希望传递此变量的内容而不是$reference
。我试过这个:
"java -jar $CreateSequenceDictionary R=$reference O=output" >mlogfile
和许多变体(如“”“eval \”)没有成功。
请问,我应该如何调整命令,以便运行存储在变量中的程序存储在变量?
中的参数编辑:如果我应该在终端中使用命令,它将如下所示:
java -jar /path/CreateSequenceDictionary.jar R=input O=output
但是,我想从变量中获取程序的名称,并从变量中获取输入文件的名称。
答案 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
变量为空的那些参数。