“读取”管道如何工作?

时间:2014-11-16 20:14:53

标签: pipe sh

据我所知,在命令

$ echo "a b\nc d" | while read line; do echo "$line"; done

while命令一次只收到一行,所以它的主体每行只执行一次。我的问题是:while在这种情况下的目的是什么?为什么

$ echo "a b\nc d" | { read line; echo "$line"; }

只输出第一行?

2 个答案:

答案 0 :(得分:2)

考虑这些命令

echo 'a b\nc d' | {

  # this command is going to read until the first newline, so we get
  # line='a b'
  read line
  echo "$line"

  # this command continues on, so we get
  # line='c d'
  read line
  echo "$line"
}

答案 1 :(得分:2)

while命令(是的,循环被认为是shell中的一种命令,而不仅仅是语法结构)接收整个输入。 read命令从while继承其标准输入,并且read从该输入消耗一行。

while命令的目的是确保每次read成功时,循环体受到教育并且read再次执行。一旦read具有非零退出状态,while命令本身就会退出。