【发布时间】:2016-06-02 23:25:11
【问题描述】:
有两个 shell 脚本数组。出于演示目的,第一个数组包含两个元素。这两个元素也将在第二个数组中添加另一个数组。
这个嵌套 for 循环的目的是从第二个数组中删除匹配的字符串。因此,最后第三个元素应该是唯一仍在第二个数组中的元素。
我相信:
- 我的 for 循环语法/算法正在跳过迭代
- 我对unset数组方法的理解不正确
请注意,我想完全删除元素,而不仅仅是将元素留空。
代码
first_string='first'
second_string='second'
third_string='third'
strings_to_remove=()
strings_to_remove+=("$first_string")
strings_to_remove+=("$second_string")
main_array=()
main_array+=("$first_string")
main_array+=("$second_string")
main_array=("$third_string")
for i in "${main_array[@]}"; do
echo $i
done
echo ''
for r in "${!strings_to_remove[@]}"; do
index=''
for i in "${!main_array[@]}"; do
if [[ "${main_array[$i]}" = "${strings_to_remove[$r]}" ]]; then
index=$i
fi
done
if [[ $index -ne '' ]]; then
unset main_array[$index]
main_array=( "${main_array[@]}" )
fi
done
echo ''
for i in "${main_array[@]}"; do
echo "$i"
done
输出
first
second
third
first
third
应该删除第一个和第二个元素,但是只删除第二个元素。我不确定算法本身或语法是否不正确。
【问题讨论】:
-
您可能会发现这篇博文很有帮助:ericlippert.com/2014/03/05/how-to-debug-small-programs
标签: arrays shell iteration nested-loops unset