我试图对数组中每个字符串元素的最后三个字符进行 != 字符串比较,然后如果不相等则删除该元素,但它没有产生预期的结果。我确信我的代码不正确,因此我正在寻找一些有关如何纠正的指导。
我尝试了两个使用“==”和“!=”的示例来测试我的代码,如下所示:
大批:
array=(8669648574foo 86696485745u 231649bar 23164919a1 8594792682foo 859479268209t)
- 首先运行“==”
for ((i=0; i<${#array[@]}; i++)); do
chomp=${array[i]: -3}
echo chomp: $chomp
if [[ $chomp == "foo" ]] || [[ $chomp == "bar" ]]; then
echo "i: $i, element: ${array[i]}"
delete=${array[i]}
echo ${array[@]/$delete}
array=( "${array[@]/$delete}" )
fi
done
array=( "${array[@]}" )
echo "First run: ${array[@]}"
输出:(代码按预期工作,删除了 foo/bar 元素 - 但这不是我想要的)
chomp: foo
i: 0, element: 8669648574foo
86696485745u 231649bar 23164919a1 8594792682foo 859479268209t
chomp: 45u
chomp: bar
i: 2, element: 231649bar
86696485745u 23164919a1 8594792682foo 859479268209t
chomp: 9a1
chomp: foo
i: 4, element: 8594792682foo
86696485745u 23164919a1 859479268209t
chomp: 09t
First run: 86696485745u 23164919a1 859479268209t # expected result
第二次运行“!=”
for ((i=0; i<${#array[@]}; i++)); do
chomp=${array[i]: -3}
echo chomp: $chomp
if [[ $chomp != "foo" ]] || [[ $chomp != "bar" ]]; then
echo "i: $i, element: ${array[i]}"
delete=${array[i]}
echo ${array[@]/$delete}
array=( "${array[@]/$delete}" )
fi
done
array=( "${array[@]}" )
echo "Second run: ${array[@]}"
输出:(代码未按预期工作)
chomp: foo
i: 0, element: 8669648574foo
86696485745u 231649bar 23164919a1 8594792682foo 859479268209t
chomp: 45u
i: 1, element: 86696485745u
231649bar 23164919a1 8594792682foo 859479268209t
chomp: bar
i: 2, element: 231649bar
23164919a1 8594792682foo 859479268209t
chomp: 9a1
i: 3, element: 23164919a1
8594792682foo 859479268209t
chomp: foo
i: 4, element: 8594792682foo
859479268209t
chomp: 09t
i: 5, element: 859479268209t
Second run: # no output, deletes all elements.
注意:我也尝试过使用unset array[$i]
,但我超出了帖子大小,因此删除了这些示例。
问:如何删除不等于 foo/bar 的数组元素?