【发布时间】:2018-05-20 23:50:18
【问题描述】:
我目前正在尝试在我的 bash 脚本中编写一个函数,该函数执行以下操作:将文件作为参数并计算该文件中数字的总和。我必须使用 for 循环和 bc 命令。
文件中的值示例(每个值单独一行):
12
4
53
19
6
这就是我目前所拥有的:
function sum_values() {
for line in $1; do
#not sure how to sum the values using bc
done
}
我在正确的轨道上吗?我不确定在这种情况下如何实现 bc 命令。
【问题讨论】:
-
请参阅BashFAQ #1 了解最佳实践:逐行处理流。另外,请注意,无论是谁给你布置作业,都是在指导你使用不良做法:
forloops should not be used to iterate over line-oriented content. -
...好吧,除非您先将面向行的内容读入数组;例如:
readarray -t values <file会将您的值放入一个名为values的数组中,您可以使用for value in "${values[@]}"; do echo "processing $value"; done形式的东西对其进行迭代。 -
...顺便说一句,使用
function关键字并不是特别好的形式——它使您的代码与/bin/sh的基线POSIX 实现不兼容,但是——不像更有用的bashisms——不为这种不兼容性增加任何价值; POSIX 函数声明只是sum_values() {,前面没有function。 -
@CharlesDuffy heh :),不要忘记,大多数教授
bash的老师不会理解本网站中好的bash答案的一半......所以......