在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
变量设置为局部变量。