用bash设置一个参数

我经常运行一个简单的bash命令:

rpm -Uvh --define "_transaction_color 3" myPackage.rpm 

哪个工作正常。

但是现在我试图把它编写成一个bash文件,并且使它更加灵活:

 #!/bin/bash INSTALL_CMD=rpm INSTALL_OPT="-Uvh --define '_transaction_color 3'" ${INSTALL_CMD} ${INSTALL_OPT} myPackage.rpm 

但是,这不断产生错误:

 error: Macro % has illegal name (%define) 

错误来自于如何处理--define和引用的_transaction_color
我已经尝试了各种各样的转义,不同的措辞,甚至使INSTALL_OPT数组,处理${INSTALL_OPT[@]}

到目前为止,我的尝试没有奏效。
显然,我想要的是非常简单的。 我只是不知道如何完成它。

我怎样才能让bash正确处理我的--define参数?

问题是在variablesreplace之后引号不被处理。 所以看起来你正在试图定义一个名为'_transaction_color的macros。

尝试使用数组:

 INSTALL_OPT=(-Uvh --define '_transaction_color 3') 

然后:

 "$INSTALL_CMD" "${INSTALL_OPT[@]}" myPackage.rpm 

${INSTALL_OPT[@]}放在双引号内以获取重要信息是很重要的。

在空间上分词可能是一个问题:

尝试:

 #!/bin/bash IFS=$'\n' INSTALL_CMD=rpm INSTALL_OPT='-Uvh' INSTALL_OPT_DEFINE='--define _transaction_color 3' ${INSTALL_CMD} ${INSTALL_OPT} ${INSTALL_OPT_DEFINE} myPackage.rpm