用bash设置参数

问题描述 投票:7回答:2

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

linux bash unix
2个回答
11
投票

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

尝试使用数组:

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

然后:

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

${INSTALL_OPT[@]}放在双引号中以获得重新引用是很重要的。


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
© www.soinside.com 2019 - 2024. All rights reserved.