使用bash设置参数

使用bash设置参数

我经常运行一个简单的bash命令:

rpm -Uvh --define "_transaction_color 3" myPackage.rpm

工作正常。

但现在我正在尝试将其写入bash文件,并使其更加灵活:

#!/bin/bashINSTALL_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正确的争论?



MMTTMM
浏览 739回答 3
3回答

呼唤远方

问题是引号在变量替换后不会被处理。所以看起来你想要定义一个名为'_transaction_color.尝试使用数组:INSTALL_OPT=(-Uvh --define '_transaction_color 3')然后:"$INSTALL_CMD" "${INSTALL_OPT[@]}" myPackage.rpm重要的是${INSTALL_OPT[@]}在双引号内得到报价。

慕姐4208626

这可能是一个关于空间分词的巴什问题:试着:#!/bin/bashIFS=$'\n'INSTALL_CMD=rpm INSTALL_OPT='-Uvh'INSTALL_OPT_DEFINE='--define _transaction_color 3' ${INSTALL_CMD} ${INSTALL_OPT} ${INSTALL_OPT_DEFINE} myPackage.rpm

凤凰求蛊

它执行重引。这一点在阵列如果这个词是双引号的话.${name[@]}将每个名称元素展开为一个单独的单词。
打开App,查看更多内容
随时随地看视频慕课网APP