为什么这个 while 循环中的读取函数不起作用?如果我取消注释回显(和注释读取),它会打印多次,但如果“读取”未被注释,它就会退出功能。相同的“读取”在循环外工作。
readTest()
{
ls -l | while read -r files; do
read -p "Continue? (Y/N): " confirm && [[ $confirm == [yY] || $confirm == [yY][eE][sS] ]] || exit 1
#echo "tttt"
done
}
行中和循环体
read
中的内容都将从管道中读取,而不是从终端中读取。的输出与模式不匹配,因此将调用该命令。while
read
ls
exit
解析 的输出
ls
很容易出错。你应该更好地使用类似的东西这将避免 inner 的输入重定向
read
。如果您不需要退出整个 shell 脚本,我建议
break
orreturn
而不是exit
.更详细的解释来回答评论
在一个简化的例子中
并假设
ls
打印在第一次迭代中,
read -r files
会得到foo
,然后read confirm
会得到bar
,在第二次迭代中,
read -r files
会得到baz
,然后read confirm
会得到 EOF,在第三次迭代中,
read -r files
会得到 EOF 并终止循环。