이후에 호출되는 작은 함수를 만들려고 합니다.
간단하게 하기 위해 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
그렇지 않으면 test( [
)가 너무 많은 인수를 제공하게 됩니다.
내가 한 일은 프로그램을 실행하는 것뿐이었습니다.
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