我想知道“正确”的方法。基本上,我有一个名为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[@]}" )
这样做有好办法吗?或者是正确的方法吗?
答案 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] $