试图了解这里发生了什么以及为什么?
首先调用名为“why”的函数,然后结果应该是对函数的另一个调用或完全退出。预期的结果永远不能在if语句下面运行循环,这可能是if-else-fi语句或if-elif-else-fi并不重要。
问题是为什么回声结束?
我不明白为什么能够调用最后一个回声。
why () {
read -p 'Loop now? [y/n]' answer
case $answer in
y | Y | yes | YES ) answer="y";;
*) exit;;
esac
}
if [ $answer = 'y' ]
then
why
fi
why
echo "End"
答案 0 :(得分:1)
您在调用why
的程序部分周围没有循环。你是说这个吗?
while true; do
why ">" y n
if [ $answer = y ]; then
do something
else
do something else
fi
done
echo "I'll never get here"
答案 1 :(得分:0)
if语句认为在函数完成时自行完成。在此示例中更好地显示,脚本将不会循环回到echo start。
echo start
why () {
read -p 'Loop now? [y/n]' answer
case $answer in
y | Y | yes | YES ) answer="y";;
*) echo 'Invalid response -- exiting now'
exit;;
esac
}
answer=y
if [ $answer = 'y' ]
then
why
echo "Ok done running the if statement ready to exit the condition now"
fi
所以要来回循环一个函数来包装if语句,如下所示:
echo start
why () {
read -p 'Loop now? [y/n]' answer
case $answer in
y | Y | yes | YES ) answer="y";;
n | N | no | NO ) answer="n";;
*) echo 'Invalid response -- exiting now'
exit;;
esac
ifFunction
}
ifFunction () {
if [ $answer = 'y' ]
then
why
echo "yes"
elif [ $answer = 'n' ]
then
echo "to bad looping anyway"
why
else
echo "else nothing but another question"
why
fi
}
why
echo never
所以答案是它已经完成了该功能,现在按预期继续运行脚本,在提供的示例中,它将作为下一个完成的任务回显结束。