如何在Bash中将数组长度赋值给变量

3

我试着写一个简单的bash脚本,用于添加整数并给出总和。我想最简单的方法是将输入分配给数组,然后遍历数组执行求和。在我的for循环中需要使用数组的长度,但我不知道如何将数组长度赋值给变量。

任何关于这个简单脚本的帮助都会受到赞赏(我写这个脚本是为了学习bash)。

#!/bin/bash
# add1 : adding user supplied ints

echo -n "Please enter any number of integers: "
read -a input

echo "Your input is ${input[*]}"
echo "${#input[@]} number of elements"

num = ${#input[@]}   # causing error
for ((i = 0; i < "${num}"; ++i )); do  # causing error
  sum = $((sum + input[$i]))
done

echo "The sum of your input is $sum"

这会导致错误:

line 10: num: command not found 
line 11: ((: i < :syntax error: operand expected (error token is "< ")

1
这里有更多关于Bash中赋值约定的信息 :),请访问:http://tldp.org/LDP/abs/html/varassignment.html - summea
你说“引起错误”,知道它引起了什么错误会很有帮助。 - msw
@msw - 已经解决。感谢反馈。错误是: 第10行:num: 命令未找到 第11行:((: i < : 语法错误:需要操作数(错误标记为“<”) - Dorian
将来,您应该将其包含(或编辑)到您的问题中。 - msw
1个回答

9

您只是有一个语法错误。在=前面删除空格:

num = ${#input[@]}   # causing error

成为:

num=${#input[@]}   # works

请注意,在Bash中使用=运算符为变量赋值时,=前后绝不能有空格。
请阅读关于高级Bash脚本指南中的变量分配入口。 (英文链接)

谢谢。它起作用了。我在整个程序中都犯了同样的错误。我感觉自己像个白痴。来自C++,那个空格并不重要... - Dorian
不用担心,每个Bash程序员都曾经看到过这个错误 ;) - hek2mgl

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接