从另一个数组中删除条目数组

Dey*_*yan 4 indexing

我有 2 个数组

    a=(1,2,3,4,5)
    b=(2,4)
Run Code Online (Sandbox Code Playgroud)

输出应该是

    c=(1,3,5) 
Run Code Online (Sandbox Code Playgroud)

(这应该是ab的结果)

我试过使用

    unset a[${b}] 
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

我现在工作的是一个循环,运行 700,000 次迭代

ter*_*don 6

首先,如果您想在 700,000 次迭代中执行此操作,您真的应该考虑 bash 以外的其他东西。此外,您显示的不是 bash 中的数组,而是字符串1。数组由空格分隔,而不是逗号。

也就是说,这是一种 bash 方式,假设是真正的数组:

a=(1 2 3 4 5)
b=(2 4)
c=( $(printf "%s\n" "${a[@]}" "${b[@]}" | sort | uniq -u) )
Run Code Online (Sandbox Code Playgroud)

如果您实际上有逗号分隔的字符串而不是数组,请改用:

a=(1,2,3,4,5)
b=(2,4)
c=( $(sed 's/,/\n/g' <(printf "%s\n" "${a[@]}" "${b[@]}") | sort | uniq -u) )
Run Code Online (Sandbox Code Playgroud)

或者,您可以改用 perl:

a=(1 2 3 4 5)
b=(2 4)
c=( $(printf "%s\n" "${a[@]}" "${b[@]}" | sort | uniq -u) )
Run Code Online (Sandbox Code Playgroud)

1严格来说,它是一个只有一个元素的数组,但就 bash 而言,它本质上与字符串相同。

  • 对于 bash 解决方案,请注意,如果 b 包含不在 a 中的元素,您将在 c 中拥有它们。狐狸示例:a=(1 2 3 4 5), b=(2 4 6) -&gt; c=(1,3,5,6) (3认同)