用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