You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Bash脚本中乘以-1运算触发语法错误该如何解决?

问题原因

你混用了Bash内置算术扩展$(( ))和外部expr命令的语法,导致解析出错:

  • $(( ))是Bash原生的算术运算语法,内部只能写算术表达式,你把expr命令写进去会被识别为非法的运算元素,触发语法错误。
  • 你加的\转义符也是多余的:只有直接调用expr命令时,*需要转义避免被shell当成通配符展开,在$(( ))内部*就是乘法运算符,不需要转义。
解决方案

有两种可行写法,都可以实现turn变量正负切换的需求:

方案1:仅使用Bash内置算术扩展(推荐)

不需要调用外部expr命令,性能更高,修改函数如下:

swap_turn() {
    turn=$(( turn * -1 ))
}

你甚至可以简化成更短的写法:turn=$(( -turn )),效果完全一致。

方案2:仅使用expr命令

如果你坚持要用expr实现,直接用命令替换$()包裹expr语句即可,不要嵌套$(( )):

swap_turn() {
    turn=$(expr $turn \* -1)
}

注意这种写法中*必须保留转义符\。

修改后运行脚本就不会再报语法错误,swap_turn调用后turn的值会从1变为-1,符合预期。

内容的提问来源于stack exchange,提问作者yoyobara

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 08:45:02