无法将项目从while循环追加到bash中的空数组

时间:2019-03-14 12:24:35

标签: arrays bash append

我已经阅读了一些有关此问题的条目,例如herehere中的条目,但是我无法使我的代码正常工作。应该很简单。

我需要在进行一些小的转换之后将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

1 个答案:

答案 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.指出的答案。