Bash变量赋值不';行不通

Bash变量赋值不';行不通,bash,Bash,当WYNIK不为空时,第72行中的Echo会打印一些内容,但在第77行中,它每次都不会打印任何内容,为什么?当您通过管道进入一个循环时,该循环在一个子壳中运行 而不是: ... | while read; do done 运行: 您的问题是,您正在使用find |创建子shell,而子shell中的更改在父shell中丢失 使用 读取-r行时;做 命令 done


当WYNIK不为空时,第72行中的Echo会打印一些内容,但在第77行中,它每次都不会打印任何内容,为什么?

当您通过管道进入一个循环时,该循环在一个子壳中运行

而不是:

... | while read; do
done
运行:


您的问题是,您正在使用find |创建子shell,而子shell中的更改在父shell中丢失

使用

读取-r行时
;做
命令

done<
WYNIK
首先被分配一个空字符串

第77行打印空字符串的原因是,
bash
创建了一个子shell来执行
;而。。。完成
块,与所有管道一样

记住,子shell中变量的任何修改都不会影响父shell

子shell继承变量。当
WYNIK
被赋值时,第72行可以打印它,因为它仍然位于子shell中


done
(子shell外部)后,返回父shell,第77行打印
WYNIK
值,未修改:空字符串。

请发布一个复制您的问题的消息。这是BashFAQ#24:不只是
| while
,而是所有管道,除非启用了
lastpipe
标志(并且满足使用它的先决条件). 即使您是通过管道连接到一个外部命令,子shell也会在它执行该外部命令之前分叉一段时间。我将修改我的答案。我不知道
lastpipe
和先决条件。谢谢!
... | while read; do
done
while read; do
done < <(...)
while IFS= read -r -d '' filename; do
  : something with "$filename"
done < <(find ... -print0)
while read -r line; do
   commands
done < <(find command)