循环函数 bash
Looping function bash
我目前正在学习 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
如果你输入了错误的值,它会重新启动函数并创建一个循环,但唯一的问题是函数会自行循环,最后当它继续它时 returns 回声与你弄错的次数一样多.
示例:
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
我的问题是...我是通过应用第二种方法以正确的方式进行操作还是有另一种方式进行操作?
感谢您的反馈
由于您正在使用 recursion 到 'loop',当每个函数完成时,您仍在执行该函数的最后几行。
要真正创建一个循环,您可以使用 while; do
结构来正确执行它。
如果您没有可靠的基础(结束)条件,则调用函数本身进行递归会产生更大的开销。
您正在使用递归,而不是循环。尝试以这种方式使用循环:
#!/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
我目前正在学习 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
如果你输入了错误的值,它会重新启动函数并创建一个循环,但唯一的问题是函数会自行循环,最后当它继续它时 returns 回声与你弄错的次数一样多.
示例:
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
我的问题是...我是通过应用第二种方法以正确的方式进行操作还是有另一种方式进行操作?
感谢您的反馈
由于您正在使用 recursion 到 'loop',当每个函数完成时,您仍在执行该函数的最后几行。
要真正创建一个循环,您可以使用 while; do
结构来正确执行它。
如果您没有可靠的基础(结束)条件,则调用函数本身进行递归会产生更大的开销。
您正在使用递归,而不是循环。尝试以这种方式使用循环:
#!/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