Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在bash函数中声明变量?(猛击)_Bash - Fatal编程技术网

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

在bash函数中声明变量?(猛击),bash,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 +=

我有这个:

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

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

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; }

但是这在这里是可选的。

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

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; }

但这在这里是可选的。

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

sum() for i in $@; do ((tot += 4)); echo $tot;done
因为你的
for
循环就是那个单一的复合命令。一旦您尝试添加另一个命令(在本例中,分配给
tot
),您需要确保该命令和
for
循环都组合在另一个复合命令中

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

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

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

第三次尝试是错误的,因为复合命令(与简单命令不同)前面不能有变量赋值


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

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

sum() for i in $@; do ((tot += 4)); echo $tot;done
因为你的
for
循环就是那个单一的复合命令。一旦您尝试添加另一个命令(在本例中,分配给
tot
),您需要确保该命令和
for
循环都组合在另一个复合命令中

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

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

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

第三次尝试是错误的,因为复合命令(与简单命令不同)前面不能有变量赋值


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

tot
设为局部变量可能是个好主意,但这实际上并不能解决最初的问题。确保赋值和
for
循环都是单个复合命令(在
{…}
中)的一部分。也可以将
i
变量设为局部变量。将
tot
设为局部变量可能是个好主意,但这实际上并不能解决原始问题。确保赋值和
for
循环都是单个复合命令的一部分(在
{…}
中)可以做到这一点。也可以将
i
变量设置为局部变量。