重置数组并使用bash脚本中的值填充它

时间:2015-02-26 08:22:53

标签: arrays linux bash shell

我想知道“正确”的方法。基本上,我有一个名为current的数组中的文件列表。这被声明为全局变量,如下所示:current=()。我已成功将所有文件放在此数组中。但现在,我正在通过解析参数来过滤掉这些文件和目录。

例如,要实现-name '*.pattern'命令,我会将pattern传递给process_name()执行此操作:

process_name ()
{
    local new_cur=()
    for i in "${current[@]}"; do
        if [[ "$i" == "$1" ]]; then
            new_cur+=("$i")
        fi
    done
    current=( "${new_cur[@]}" )
}

循环结束后,我想“清除”我的current数组。然后我想循环遍历new_cur数组,基本上使它等于current,或者如果可以的话,只需执行$current = $new_cur之类的操作(虽然我知道这不起作用)

我尝试在for循环后执行此操作(在process_name()中),但我的数组current实际上并没有改变:

current=( "${new_cur[@]}" )

这样做有好办法吗?或者是正确的方法吗?

2 个答案:

答案 0 :(得分:7)

要重置数组,只需使用:

current=()

这将删除旧条目并声明一个0元素数组。

答案 1 :(得分:2)

您可以使用array1=( "${array2[@]}" )简单地克隆数组。例如:

[STEP 100] $ echo $BASH_VERSION
4.3.33(1)-release
[STEP 101] $ cat foo.sh
current=(aa bb cc)

process_name ()
{
    local new_cur=()

    for i in "${current[@]}"; do
        if [[ "$i" == "$1" ]]; then
            new_cur+=("$i")
        fi
    done
    current=( "${new_cur[@]}" )
}

process_name aa

for i in "${current[@]}"; do
    printf '%s\n' "$i"
done
[STEP 102] $ bash foo.sh
aa
[STEP 103] $