我明白了
$ ./5_divisible_by_1_to_10.sh
./5_divisible_by_1_to_10.sh: line 16: [: -eq: unary operator expected
false
true
为了:
divisible_by () {
under_test=$1
from=2
to=4
divisible=0
for ((check=from; check<=to; check++)) {
if [ $(($under_test % $check)) -ne 0 ]; then
divisible=1
fi
}
return $divisible
}
divider=10
x= divisible_by "$divider"
if [ $x -eq 0 ]; then # <--- Line 16
echo "$x true"
else
echo "$x false"
fi
divider=12
if divisible_by $divider; then
echo "true"
else
echo "false"
fi
对 12 的第二次调用工作正常,但使用 10 的第一次调用(我试图显示结果)给出了错误。
$x
在, ie周围添加引号"$x"
会产生不同的错误:
$ ./5_divisible_by_1_to_10.sh
./5_divisible_by_1_to_10.sh: line 16: [: : integer expression expected
false
true
答案1
在
if [ $x -eq 0 ]
x
是空的,因为该行
x= divisible_by "$divider"
是错误的:它divisible_by
使用空环境变量进行调用x
,但甚至不尝试x
在 shell 环境中进行设置。你需要:
divisible_by "$divider"
x=$?
并且您应该始终引用变量。