如何在bash中检查数组是否包含除特定两个字符值以外的任何内容?

时间:2015-10-07 13:53:31

标签: arrays bash

代码:

[[ " ${arr[*]} " == *" "[^a]" "* ]] && echo "array has non-a element" || echo "All a elements"
如果我试图查看是否存在不包含" a"的数组元素,

效果很好。

例如: arr =(a a a c)

返回: 数组有非元素

我想改变上面的代码,以便能够看到是否有一个元素不包含" CA"在一个看起来像:

的数组中

arr =(CA CA CA AC)

arr =(CA CA CA BC AB)

(KL CA CA CA)

2 个答案:

答案 0 :(得分:1)

您可以printf使用grep -zEqv(gnu-grep):

$ arr=(CA CA CA BC AB)
$ printf "%s\0" "${arr[@]}" | grep -zEvq "^CA$" &&
     echo "array has non-CA element" || echo "All CA elements"
array has non-CA element

$ arr=( CA CA CA $'CA\nCA' )
$ printf "%s\0" "${arr[@]}" | grep -zEvq "^CA$" &&
     echo "array has non-CA element" || echo "All CA elements"
array has non-CA element

$ arr=(CA CA CA)
$ printf "%s\0" "${arr[@]}" | grep -zEvq "^CA$" &&
     echo "array has non-CA element" || echo "All CA elements"
All CA elements

答案 1 :(得分:0)

只需使用!=

[[ "${arr[*]}" != *CA* ]]