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
我想从输入中读取每一行。在 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