【发布时间】:2012-11-02 03:58:48
【问题描述】:
我经常运行一个简单的 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 参数?
【问题讨论】:
-
你试过
INSTALL_OPT='-Uvh --define _transaction_color 3',对吧? -
@sampson-chen:试过了。 “错误:宏 %_transaction_color 的主体为空”。
-
这是因为 bash 将您的参数读取为
-Uvh和--define和'_transaction_color和3'。在这种情况下,您必须使用数组(如下 Barmar 的回答所示):INSTALL_OPT=(-Uvh --define '_transaction_color 3')。然后${INSTALL_CMD} "${INSTALL_OPT[$@]}" myPackage.rpm工作(用双引号,正如他提到的)。