我有 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 次迭代
首先,如果您想在 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 而言,它本质上与字符串相同。