bash 的 while 循环内的变量从未改变

bash 的 while 循环内的变量从未改变

为什么下面的代码总是输出“0”?

#!/bin/bash

RETVAL=0
echo -e '1\n2' | while read number; do
    RETVAL=1
done

echo $RETVAL

答案1

while 循环是管道的一部分,因此在子 shell 中运行。在子 shell ( RETVAL=1) 中设置的变量不会影响父 shell ( echo $RETVAL)。

答案2

这与 echo 如何不将 EOF / Ctrl D 传递给 while read 有关。

如果您拉出回声并在 while 循环中输入 Ctrl D,它将按预期工作。

不确定如何通过回声发送 Ctrl D。

相关内容