我已经阅读了一些有关此问题的条目,例如here或here中的条目,但是我无法使我的代码正常工作。应该很简单。
我需要在进行一些小的转换之后将while循环中的项目附加到一个空列表中。我的代码如下:
folder='/path/to/directories/'
ls $folder | while read dir ; do
if [[ $dir =~ ANF-* ]]; then
names=()
ls $folder/$dir/FASTQS | while read file ; do
name=$(echo $file | cut -d "_" -f 1-3 )
echo $name
names+=("$name")
done
echo ${names[*]} #Also tried echo ${names[@]}
fi
done
第一个“回声”起作用,因此它可以通过条件进入第二个循环。
我也尝试过使用'declare -a'创建空数组。
如果我尝试将$ file追加到列表中,则它也不起作用。
我认为问题是附加动作,因为如果我创建一个不为空的数组,则会在第二个“回声”中获得该数组的项。
非常感谢。 RX
答案 0 :(得分:0)
尝试用双引号包裹回声:
folder='/path/to/directories/'
ls $folder | while read dir ; do
if [[ $dir =~ ANF-* ]]; then
names=()
local iteration=1
ls $folder/$dir/FASTQS | while read file ; do
name=$(echo $file | cut -d "_" -f 1-3 )
echo $name
names+=("$name")
echo "iteration $iteration"
iteration=$((iteration+1))
declare -p names
done
echo "${names[@]}"
# you can show the array like this:
declare -p names
fi
done
您的names
数组正在被更改,但是当循环终止时,更改将消失。看看@Benjamin W.指出的答案。