後で呼び出される小さな関数を作成しようとしています。
簡単にするために、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