代码之家  ›  专栏  ›  技术社区  ›  Abhijeet Kumar

语法错误:bash中需要操作数(错误标记为“+”)

  •  0
  • Abhijeet Kumar  · 技术社区  · 7 年前

    我试图计算通过命令行输入到脚本文件的数字总和。这是我的密码

    #!/bin/bash
    for ((i=0;i<=$#;i++))
    do
    sum=$(($i + $sum))
    done
    echo $sum | bc
    

    我的终端输入是

    bash file.sh 1 2
    

    所以输出应该是3,但我得到

     syntax error: operand expected (error token is "+ ")
    
    2 回复  |  直到 7 年前
        1
  •  1
  •   Inian    7 年前

    实际错误原因是由于未初始化变量 sum 进行循环的第一次迭代。在进入循环之前初始化变量。

    还有一个主要的逻辑缺陷是,您甚至没有在输入参数上迭代,而只是在计数器上迭代 i 如果传递的参数不是 1 2 从命令行。

    argc argv (arg count和arg vector:仅供理解)并且您不需要 bc 完全

    argc=$#
    argv=("$@")
    
    sum=0
    for ((i=0; i<${argc}; i++)); do
        sum=$((${argv[i]} + $sum))
    done
    
        2
  •  1
  •   rici    7 年前

    要循环所有命令行参数,可以使用shell的简化形式 for 声明:

    sum=0
    for i do
      ((sum += i))
    done
    

    ((sum+=i)) 被bash和许多其他shell接受;对于与Posix兼容的shell,可以使用算术扩展和 : 内置:

    : $((sum += i))