我已经使用了下面的脚本(在这个网站上找到),并且无法让它工作。printf不输出到标准输出,而是输出到函数。为什么?
askit() {
while true ;
do
read -r -n 1 -p "continue? [y/n] :" rep
case $rep in
[yY]) return 0 ;;
[nN]) return 1 ;;
*) printf "no no, only y or n"
esac
done
}
if $(askit)
then
printf "\nWe go on, %s say.\n" $you
else
printf "\nThat's it, %s want to quit!\n" $you
break
fi
它适用于“y”或“n”条目。其他条目循环回来,没有终端输出。在下一个“y”或“n”之后,结果始终为假。
printf语句中的换行符是不能在case语句中放入printf语句的遗留问题。我也尝试过回声以及相同的结果。
return语句似乎输出到if条件。我很确定我的语法没问题。我已经看过fflush和stdbuf ...
问题:为什么printf输出到if语句而不是终端?
你可以提供x-ref到你从哪里得到这个,所以原来可以改进? –
欢迎来到Stack Overflow。 请注意,在这里说'谢谢'的首选方式是通过 提高投票的好问题和有用的答案(一旦你有足够的声誉这样做),并接受任何 问题最有用的答案,你问(这也给你一个小小的提升,以你的声望 )。 请参阅[关于]页面,以及[如何在此处提问 ?]和 [当有人回答我的 问题时,我该怎么办? ?](http://stackoverflow.com/help/someone-answers) –