bash 读取行出口 1

bash read line exits 1

我想从输入中读取每一行。在 while 循环中成功读取每一行。然而,循环以状态 1 结束:

$ incr=0
$ while IFS='' read -r line || [[ -n "$line" ]] ; do    
  incr=$((incr+1));    
  echo "$incr: $line"; 
done < <(echo -e "one \ntwo\tthree\nfour")
1: one 
2: two  three
3: four

$ echo "status ${PIPESTATUS[@]}" 
status 1

为什么我得到的退出状态不同于 0?

1 似乎是导致 while 循环首先退出的命令 ([[ -n "$line" ]]) 的退出状态。这可能是 bash 中的错误,或者至少是命令设置 $?PIPESTATUS.

的未记录差异

您可以在更简单的命令中观察到相同的差异:

$ while false; do echo foo; done
$ printf '%s\n' "$?" "${PIPESTATUS[@]}"
0
1