我经常运行一个简单的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-Uvh
和--define
和'_transaction_color
和3'
。在这种情况下,您必须使用数组(如Barmar的答案所示):INSTALL_OPT=(-Uvh --define '_transaction_color 3')
。然后${INSTALL_CMD} "${INSTALL_OPT[$@]}" myPackage.rpm
可以工作(用双引号,正如他所提到的)。 - gniourf_gniourf