我想删除包含其他数组元素的数组元素。
EG
array1 =(aaaa bbbb abcd)
array2 =(b c)
结果=(aaaa)
我已经编写了这段代码,但它没有工作
for element in "${array2[@]}"
do
result=(${array1[@]/.*$element.*})
done
你可以告诉我为什么以及我应该做什么呢?
答案 0 :(得分:1)
我认为你错了你需要逗号作为数组元素之间的分隔符。但是逗号实际上成为元素的一部分。
除此之外,result
也不会因为您需要聚合已删除的元素而烦恼。但是result
是从array1
分配的。所以删除了元素
从上一次迭代中将再次成为resut
的一部分。
array1=(aaaa bbbb abcd)
array2=(b c)
result=("${array1[@]}")
for element in "${array2[@]}"
do
result=(${result[@]/*${element}*/})
done
echo "${result[@]}"
这会将数组复制到result
数组中,并使用array2
从中删除元素。
答案 1 :(得分:1)
这是我的捅。
我很确定这可以通过awk
完全完成,但我还没有发现:
#!/bin/bash
array1=(aaaa bbbb abcd)
array2=(b c)
result=()
for i in "${array1[@]}"
do
sumIndexOf=0
for j in "${array2[@]}"
do
sumIndexOf=$((sumIndexOf + $(echo $i $j | awk '{print index($1,$2)}')))
done
if [ "$sumIndexOf" = "0" ]; then
result+=($i)
fi
done
printf '%s\n' "${result[@]}"
参考/使用: