【发布时间】:2017-03-10 15:05:05
【问题描述】:
我有这个 Bash sn-p:
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,它会打印文件中的所有行。所以我假设一个变量范围问题。
我应该在此处进行哪些更改才能使其正常工作?
【问题讨论】:
-
这是BashFAQ #24。
-
顺便说一句,
while IFS= read -r File; do将减少名称 - 当您的文件名包含反斜杠文字或以空格结尾时,原始代码将表现不佳。有关使用while read循环的信息,请参阅 BashFAQ #1。 -
另外,如果你想打印整个数组(不仅仅是它的第一个元素),请使用
printf '%s\n' "${SourceFiles[@]}",可选地使用%q\n以eval-safe 形式引用带有不可打印字符的文件名。 -
数组由函数处理。 echo 仅用于调试:)。
-
当然,但是如果您使用它进行调试并且在您希望看到 10 个名称时只看到一个名称,您可能会错误地认为
while read代码仍然被破坏,而实际上错误是使用echo命令。
标签: arrays bash variables while-loop scope