希望有人可以帮助我一些非常基本的东西。我正在编写一个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,但第二个回声输出绝对没有。
答案 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