为了账号安全,请及时绑定邮箱和手机立即绑定

使用bash设置参数

使用bash设置参数

MMTTMM 2019-07-11 10:42:28
使用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正确的争论?
查看完整描述

3 回答

?
呼唤远方

TA贡献1856条经验 获得超11个赞

问题是引号在变量替换后不会被处理。所以看起来你想要定义一个名为'_transaction_color.

尝试使用数组:

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

然后:

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

重要的是${INSTALL_OPT[@]}在双引号内得到报价。


查看完整回答
反对 回复 2019-07-11
?
慕姐4208626

TA贡献1852条经验 获得超7个赞

这可能是一个关于空间分词的巴什问题:

试着:

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


查看完整回答
反对 回复 2019-07-11
?
凤凰求蛊

TA贡献1825条经验 获得超4个赞

它执行重引。这一点在阵列如果这个词是双引号的话.${name[@]}将每个名称元素展开为一个单独的单词。

查看完整回答
反对 回复 2019-07-11
  • 3 回答
  • 0 关注
  • 763 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信