语法错误:bash中的操作数预期(错误标记为“+”)

时间:2017-11-03 07:17:00

标签: bash sh

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

#!/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 个答案:

答案 0 :(得分:1)

要遍历所有命令行参数,可以使用shell for语句的简化形式:

sum=0
for i do
  ((sum += i))
done
bash和许多其他shell接受

((sum+=i));对于Posix兼容的shell,您可以使用内置:的算术扩展:

: $((sum += i))

答案 1 :(得分:0)

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

另一个主要的逻辑缺陷是你甚至没有迭代输入参数,而只是在计数器i上,如果从命令传递1 2以外的参数,它将产生不正确的结果 - 线。

你需要传递实际的参数argcargv(arg count和arg vector:仅用于理解目的),你根本不需要bc

argc=$#
argv=("$@")

sum=0
for ((i=0; i<${argc}; i++)); do
    sum=$((${argv[i]} + $sum))
done