0

试图了解这里发生了什么以及为什么?

首先调用名为“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"
4

2 回答 2

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"
于 2012-12-12T01:36:40.123 回答
0

if 语句认为它在函数完成时自行完成。在这个例子中得到了更好的展示,并且脚本不会循环回到 echo 开始。

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

所以答案是它已经完成了该功能,现在按预期继续执行脚本,在提供的示例中,它会回显 end 作为下一个要完成的任务。

于 2012-12-12T18:43:17.157 回答