gpt4 book ai didi

Linux shell 错误?管道中的变量分配不起作用

转载 作者:IT王子 更新时间:2023-10-29 00:57:04 24 4
gpt4 key购买 nike

为什么 FILE_FOUND 在这个错误的末尾是 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 功能,而不是一个错误? :)

请帮忙。

最佳答案

常见问题是因为您正在通过管道进入 while,因此它在子 shell 中运行,无法将环境变量传递回其父级。我猜“unix”在这方面是不同的,因为你在那里运行不同的 shell(ksh?)

可能不需要管道连接到 while 循环。你能改用这个习语吗?

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

如果你必须使用子 shell,那么你必须在进程之外做一些事情,比如:

touch /tmp/file_found

关于Linux shell 错误?管道中的变量分配不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1796968/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com