【问题标题】:bash expr syntax error when multiplying variable by integer将变量乘以整数时出现bash expr语法错误
【发布时间】:2016-08-24 14:18:14
【问题描述】:

我正在尝试学习 bash,并尝试制作一个简单的 bash 脚本来测试我的终端。但是,当使用 expr 命令时,系统一直告诉我 expr 命令的语法错误。这是脚本:

#!/bin/bash
declare -a typo
x=0
y=25
function arrayAndDisplay {
    for x in y;
    do
        typo[x]= `expr $x * 25`
        echo ${typo[x]}
    done
}
arrayAndDisplay

当我尝试在终端中运行脚本时,这是我得到的错误消息:

expr: syntax error

我查看了参考网站和其他 StackOverflow 帖子,但似乎没有任何效果。谁能帮帮我?

P.S:我使用的是 Mac OS X Yosemite (10.10.1)

【问题讨论】:

  • 去掉=后面的空格,for x in y的作用是什么?
  • @anubhava 好的,但是你有什么建议而不是for x in y
  • 顺便说一句,typo[x]=$((x*25))
  • 您是否尝试从0 to 24 运行循环?

标签: bash osx-yosemite


【解决方案1】:

mac OS 中的expr 语法是

$(($x*25))

而不是

`expr $x \* 25`

【讨论】:

    【解决方案2】:

    expr 中的 * 正在扩展,因此您实际上传递的是文件列表而不是乘号。逃脱它:

        typo[x]= `expr $x \* 25`
    

    【讨论】:

      【解决方案3】:

      三件事:

      1. for x in y; 应该是 for x in $y;
      2. typo[x]=expr $x * 25`` 删除“=”左右之间的空格
      3. typo[x]=expr $x * 25`` 不鼓励删除反引号并使用$(...) Alos,您应该转义“*”,因为它具有含义并被扩展以显示当前目录中的所有文件。所以你应该像这样使用它:

        typo[x]=$(expr $x \* 25)
        

      【讨论】:

      • typo[x]=$(expr $x \* 25) (+1) 中缺少开头( ;)
      • 感谢@kobame 提醒我。已编辑答案:)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-24
      • 1970-01-01
      • 2021-04-17
      • 1970-01-01
      • 2017-02-06
      • 2014-10-03
      相关资源
      最近更新 更多