我目前正在学习bash,而且我正在使用循环函数来调用函数,如果该值不是预期值。
我创建了一个小函数
#!/bin/bash
find_number(){
echo "Enter number"
read number
if [ ! $number == 1 ]; then
echo is not 1, enter number again
find_number
fi
echo "Got it"
}
find_number
如果输入一个错误的值,它会重新启动该函数并创建一个循环,但唯一的问题是函数会自行循环,最后当它继续时它会在错误的时候返回echo。
例:
Enter number
5
is not 1, enter number again
Enter number
5
is not 1, enter number again
Enter number
1
Got it
Got it
Got it
如你所见,我得到了3次结果。 为了解决这个问题,我以另一种方式写了我的代码。
#!/bin/bash
find_number(){
echo "Enter number"
while read number; do
if [ ! $number == 1 ]; then
echo is not 1, enter number again
else
break
fi
done
echo "Got it"
}
find_number
我的问题是......我是通过应用第二种方法还是以正确的方式做到这一点,还是采用了另一种方法?
感谢您的反馈
答案 0 :(得分:1)
由于你使用recursion来'循环',当每个函数完成时,你仍然在完成该函数的最后几行。
要真正创建循环,您可以使用while; do
结构正确执行它。
如果没有可靠的基础(结束)条件,调用函数本身进行递归可能会产生更大的开销。
答案 1 :(得分:0)
您正在使用递归,而不是循环。尝试以这种方式使用循环:
#!/bin/bash
find_number(){
echo "Enter number"
read number
while [ ! "${number}" == "1" ]; do
echo "is not 1, enter number again"
read number
done
echo "Got it"
}
find_number