shell☞read嵌套

阅读量: zyh 2021-09-29 09:56:00
Categories: > Tags:

前言

今天碰到一个群友咨询一个问题,代码如下:

cat xxx | while read line;do
    read -p "y|n:" yn
    echo $yn
    echo $line
done

他的目标预期是,循环体里的read可以接收来自键盘的输入。

但是,实际情况是,循环体里的read自动接收了xxx的数据。

原因

read默认是从标准输入里接收数据,因此两个read均采用了默认行为。

解决

修改循环体外read的默认输入源,变更为其它文件描述符。

代码如下:

while read -u 6 line;do
    read -p "y|n:" yn
    echo $yn
    echo $line
done 6<xxx