为什么下面的代码总是输出“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。