Bash中的变量范围问题

时间:2016-10-27 19:38:17

标签: arrays bash variables while-loop scope

我有这个Bash片段:

SourceFiles=()
grep --no-filename -R '^[a-zA-Z]' "$SourceDirectory/XilinxCoreLib/vhdl_analyze_order" | while read File; do
  SourceFiles+=("$SourceDirectory/XilinxCoreLib/$File")
done

echo $SourceFiles

它从磁盘读取文件,并将所有以字母字符开头的行传递给while循环。

我的问题是在处理循环后$SourceFiles为空。我在循环中添加了一个echo $File,它打印了文件中的所有行。所以我假设一个变量范围问题。

我应该在这里做些什么才能让它发挥作用?

1 个答案:

答案 0 :(得分:3)

管道的每个元素都在自己的子shell中运行,这意味着它自己的执行环境;所以要解决这个问题,你需要将<?xml version="1.0"?> <configuration> <system.webServer> <directoryBrowse enabled="true" /> <security> <requestFiltering> <hiddenSegments> <add segment="Template" /> </hiddenSegments> </requestFiltering> </security> </system.webserver> </configuration> - 循环移出管道。

最简单的解决方法是将while命令移动到进程替换中;也就是说,改变这种结构:

grep

到此:

grep ... | while ...
  ...
done