【问题标题】:Bash addition before multiplication (precedence in expression using parenthesis)乘法前的 Bash 加法(使用括号的表达式中的优先级)
【发布时间】:2014-04-04 16:12:50
【问题描述】:

我试图在乘以结果之前将 1 与变量相加 在 Java 中类似于

int upperBound = (curBatch + 1) * elePerBatch;

我尝试了以下方法

upperBound=$(($curBatch + 1 * $elePerBatch))
upperBound=$((($curBatch + 1) * $elePerBatch))
upperBound=$(((($curBatch + 1)) * $elePerBatch))
upperBound=$(($(($curBatch + 1)) * $elePerBatch))

没有任何效果,我得到了这种错误

0 + 1 * : 语法错误:预期操作数(错误标记是“*”)

我在其他问题中看到了这个错误,但我没有找到解决问题的方法。

【问题讨论】:

  • 请将您的解决方案作为答案发布,而不是对问题的编辑。回答您自己的问题不仅被允许,而且被鼓励。
  • 好吧,我想这比删除它更好。谢谢。

标签: bash expression parentheses operator-precedence


【解决方案1】:

原来 elePerBatch 没有初始化。

我无法弄清楚错误的含义,否则我会注意到它。

这行得通

upperBound=$(($(($curBatch + 1)) * $elePerBatch))

【讨论】:

  • 这实际上为在算术表达式中使用带有变量的美元符号提供了一个很好的论据。完全合法的upperBound=$(( (curBatch + 1) * elePerBatch ))(请注意,您不需要像答案中所示嵌套算术表达式)不会引发语法错误;未定义的变量 elePerBatch 会简单地计算为零。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多