有两个 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
应删除第一个和第二个元素,但仅删除第二个元素。我不确定算法本身或语法是否不正确。
最佳答案
问题出在这里:
[[ $index -ne '' ]]
这是进行算术测试,[[ 0 -ne '' ]]
返回 false
。更改自:
index=''
...
if [[ $index -ne '' ]]; then
至:
index=-1
...
if [[ $index -ge 0 ]]; then
你就完成了。
关于arrays - 嵌套 for 循环行为 - shell 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35538334/