我经常运行一个简单的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[@]}。
--define
_transaction_color
INSTALL_OPT
${INSTALL_OPT[@]}
到目前为止,我的尝试还没有成功。 显然,我想要的非常简单。我只是不确定如何完成它。
如何让bash --define正确处理我的论点?
问题在于变量替换后不处理引号。因此,看起来您正在尝试定义名为的宏'_transaction_color。
'_transaction_color
尝试使用数组:
INSTALL_OPT=(-Uvh --define '_transaction_color 3')
然后:
"$INSTALL_CMD" "${INSTALL_OPT[@]}" myPackage.rpm
放在${INSTALL_OPT[@]}双引号中以获得重新报价很重要。