Linux shell bug?管道中的变量赋值不起作用

为什么FILE_FOUND在这个bugger的末尾为0:

FILE_FOUND=0

touch /tmp/$$.txt

ls -1 /tmp/$$.* 2>/dev/null | while read item; do
    FILE_FOUND=1
    echo "FILE_FOUND = $FILE_FOUND"
done

echo "FILE_FOUND = $FILE_FOUND"

rm -f /tmp/$$.txt 2>/dev/null

?? !!

在Unix上,FILE_FOUND保持为1(应该如此),但在Linux(RedHat,Cygwin,..)上,它会跳回到0!

它是Linux shell功能,而不是bug吗? 🙂

请帮忙.

最佳答案
因为你输入while而导致的常见问题,因此在子shell中运行,而子shell无法将环境变量传递回其父级.我猜这个“unix”在这方面有所不同,因为你在那里运行一个不同的shell(ksh?)

可能不需要到while循环的管道.你能用这个成语吗?

for item in /tmp/$$.*; do
    ....
done

如果你必须使用子shell,那么你将不得不做一些外部的过程,如:

touch /tmp/file_found

转载注明原文:Linux shell bug?管道中的变量赋值不起作用 - 代码日志