据我所知,在命令
中$ echo "a b\nc d" | while read line; do echo "$line"; done
while
命令一次只收到一行,所以它的主体每行只执行一次。我的问题是:while
在这种情况下的目的是什么?为什么
$ echo "a b\nc d" | { read line; echo "$line"; }
只输出第一行?
答案 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
命令本身就会退出。