我有这个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
,它打印了文件中的所有行。所以我假设一个变量范围问题。
我应该在这里做些什么才能让它发挥作用?
答案 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