一尘不染

用bash设置参数

linux

我经常运行一个简单的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正确处理我的论点?


阅读 352

收藏
2020-06-02

共1个答案

一尘不染

问题在于变量替换后不处理引号。因此,看起来您正在尝试定义名为的宏'_transaction_color

尝试使用数组:

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

然后:

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

放在${INSTALL_OPT[@]}双引号中以获得重新报价很重要。

2020-06-02