我正在尝试创建一个随后调用的小函数。
为了简单起见,我只想验证 12 能被 2,3 和 4 整除
代码是:
divisible_by () {
under_test=12
from=2
to=4
divisible=0
for ((check=from; check<=to; check++)) {
echo "check= $check"
if [ $under_test % $check -ne 0 ]; then
divisible=1
fi
}
return $divisible
}
x=divisible_by
if [ $x -eq 0 ]; then
echo "true"
else
echo "false"
fi
目前我得到
./5_divisible_by_1_to_10.sh: line 16: [:
divisible_by: integer expression expected
false
我也发现很难将数字作为参数传递,但也许这是相关的。
答案1
divisible_by () {
under_test=12
from=2
to=4
for ((check=from; check<=to; check++)) {
echo "check=$check"
((under_test % check == 0)) || return
}
true
}
if divisible_by; then
echo true
else
echo false
fi
答案2
x=divisible_by
不会调用该divisible_by
函数。你可以做的是
divisible_by
x=$?
(但在这种情况下这是一个不好的方法set -e
),或者
divisible_by () {
[...]
echo $divisible
}
x=$(divisible_by)
[...]
答案3
你应该改变这一行:
if [ $under_test % $check -ne 0 ]; then
进入
if [ "$(($under_test % $check))" -ne 0 ]; then
如果没有的话,测试 ( [
) 就会给出太多的参数。
我所做的就是运行程序:
under_test=12
from=2
to=4
divisible=0
for ((check=from; check<=to; check++)) {
echo "check= $check"
if [ $under_test % $check -ne 0 ]; then
divisible=1
fi
}
并首先使其正常工作。
另一个问题是从函数返回值:
divisible_by () {
under_test=12
from=2
to=4
divisible=0
for ((check=from; check<=to; check++)) {
echo "check= $check"
if [ "$(($under_test % $check))" -ne 0 ]; then
divisible=1
fi
}
mydivisible=$divisible
}
divisible_by
x=$mydivisible
if [ "$x" -eq 0 ]; then
echo "true"
else
echo "false"
fi
因为 return 不返回函数值。
运行给出输出:
check= 2
check= 3
check= 4
true