Bash printf不输出到stdout,而是输出到函数输出。为什么?
我使用了下面的脚本(在这个网站上找到),但很难让它正常工作Bash printf不输出到stdout,而是输出到函数输出。为什么?,bash,printf,Bash,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"
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语句中的换行是由于无法将printf语句放入case语句中而遗留下来的。我也试过echo,结果也一样
return语句似乎正在输出到if条件语句。我很确定我的语法是正确的。我已经调查了fflush和stdbuf
问题:为什么printf输出到if语句而不是终端?这有几个问题: 首先,在退出while循环或返回值之前,
askit
函数不会返回
如果我理解正确,您希望打印我们继续,每次用户需要输入值时,您都会说东西
假设您在函数fun
中声明了一个变量
#!/bin/bash
askit()
{
name="User"
while true
do
printf "\n%s, go to to say " $name
read -r -n 1 -p "continue?[y/n] :" rep
case $rep in
[yY]) return 0;;
[nN]) return 1;;
* ) printf "\nEnter either y or n\n" ;;
esac
done
}
if askit
then
printf "\nSuccess\n"
else
printf "\nFailure\n"
fi
其次,不能使用$(askit)
,因为这将从askit
函数中打印的内容填充if语句的其余部分。这显然不是你想要的。您只需要确认函数是否成功返回
问:为什么printf输出到if语句而不是
终点站
$()
是命令替换,通常用于将结果从一个命令传递给另一个命令。当你用printf传递一个函数时,事情会变得很糟糕。太好了。。。。非常感谢你@sjsam。需要研究所有这些括号里的东西。伟大的网站,将会回来。@sjsam-如果你能解释为什么这是答案,那就太好了。这样的解释可能也会赢得更多的选票你能提供你从哪里得到这个的x-ref吗,这样原始的可以被改进吗?欢迎来到堆栈溢出。请注意,在这里说“谢谢”的首选方式是投票选出好的问题和有用的答案(一旦你有足够的声誉这么做),并接受对你提出的任何问题最有用的答案(这也会给你的声誉带来一点提升)。请参阅本页,以及