Bash:逐行读取数组并在之后回显

时间:2017-05-13 22:15:00

标签: bash

希望有人可以帮助我一些非常基本的东西。我正在编写一个bashscript,它应该读取一些文件路径并将其写入数组但是当我尝试输出数组后,它似乎是空的。有人可以告诉我为什么吗?

#!bin/bash

counter=0;
find /home/ftpuser/TTT -type f | while read line;
   do
      origin[counter]=$line;
      counter=${$counter + 1};
      echo $counter
   done

for(int i=0;i<${origin[@]})
do
   echo ${origin[$i]};
done

第一个回声输出1-124,但第二个回声输出绝对没有。

2 个答案:

答案 0 :(得分:0)

这必须是重复的,但我无法在快速搜索中找到一个。

管道的右侧在子壳中运行,该子壳在循环完成后立即退出,并使用其变量。改为使用流程替换:

while read line; do
...
done < <(find /home/ftpuser/TTT -type f)

此外,如果您正在运行Bash 4+,您可以使用mapfile(也称为readarray)一次性将行读入数组,而不是编写自己的循环:< / p>

mapfile -t origin < <(find /home/ftpuser/TTT -type f)

答案 1 :(得分:0)

您没有使用无法在纯shell中处理的find的任何功能:

shopt -s nullglob globstar
for f in /home/ftpuser/TTT/**/*; do
  [[ -f $f ]] || continue
  origin+=("$f")
done

for f in "${origin[@]}"; do
  echo "$f"
done