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)