Bash:删除一个包含另一个数组中的值的数组元素

Bash: remove an array element which contains a value in another array

我想删除包含其他数组元素的数组元素。

array1 = (aaaa bbbb abcd)

array2 = (b c)

result = (aaaa)

我写了这段代码,但不起作用

1
2
3
4
for element in"${array2[@]}"
    do
        result=(${array1[@]/.*$element.*})
    done

你能告诉我为什么,我应该怎么做吗?


这是我的刺。我很肯定这完全可以用awk来完成,但我还不知道怎么做:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#!/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
'
"${result[@]}"

参考/使用:

  • https://stackoverflow.com/a/17695693/1688441
  • bash:在不指定键的情况下向数组添加值
  • 将awk结果赋给变量

我认为您错了,您需要逗号作为数组元素之间的分隔符。但逗号实际上成为元素的一部分。除此之外,result也不会工作,因为您需要聚合删除的元素。但resultarray1分配。所以元素被移除了从上一次迭代将再次成为resut的一部分。

1
2
3
4
5
6
7
8
9
10
array1=(aaaa bbbb abcd)
array2=(b c)  
result=("${array1[@]}")

for element in"${array2[@]}"
do
     result=(${result[@]/*${element}*/})
done

echo"${result[@]}"

这会将数组复制到result数组中,并使用array2从中删除元素。