在bash函数中声明变量? (BASH)

时间:2016-09-29 11:18:00

标签: bash

我有这个:

sum() for i in $@; do ((tot += 4)); echo $tot;done

现在,如何在for循环之前重置tot变量?

我试过了:

sum() tot = 0; for i in $@; do ((tot += 4)); echo $tot;done

sum() tot = 0;done; for i in $@; do ((tot += 4)); echo $tot;done

sum() tot = 0 for i in $@; do ((tot += 4)); echo $tot;done

sum() ((tot = 0)) for i in $@; do ((tot += 4)); echo $tot;done

2 个答案:

答案 0 :(得分:2)

您必须使用tot关键字为函数设置本地变量local

sum() { local tot; for i in $@; do ((tot += 4)); echo $tot;done; }

可选地,在定义局部变量时,您还可以设置初始值:

sum() { local tot=0; for i in $@; do ((tot += 4)); echo $tot;done; }

但这是可选的。

答案 1 :(得分:2)

函数定义需要单个复合命令作为其主体。这是合法的

sum() for i in $@; do ((tot += 4)); echo $tot;done

因为for循环是单个复合命令。一旦您尝试添加另一个命令(在这种情况下,分配给tot),您需要确保该命令和for循环合并在< em>另一个复合命令。

定义函数的常用方法是始终使用大括号组(或在某些情况下,子shell (...)),即使大括号组中的唯一命令是另一个复合命令。这里,大括号组允许您将赋值语句添加到函数体:

sum () {
    tot=0
    for i in "$@"; do ((tot += 4)); echo "$tot"; done
}

前两次尝试是错误,因为单个赋值语句不是有效的函数体。

您的第三次尝试是错误,因为复合命令(与简单命令不同)不能在变量赋值之后。

你的第四次尝试在语法上是合法的;它定义了一个函数sum,它将tot的值设置为0. for循环在定义函数后执行,而不是函数定义的一部分。