用bash设置参数

时间:2012-11-13 17:22:55

标签: linux bash unix

我经常运行一个简单的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参数?

2 个答案:

答案 0 :(得分:11)

问题是变量替换后不会处理引号。所以看起来你正在尝试定义一个名为'_transaction_color的宏。

尝试使用数组:

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

然后:

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

${INSTALL_OPT[@]}置于双引号内以获得重新引用非常重要。

答案 1 :(得分:0)

这可能是在空间上分词的bash问题:

尝试:

#!/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