在bash中的数组运算符中

ʞɔı*_*ɔıu 11 arrays bash shell

有没有办法测试数组是否包含指定的元素?

例如,像:

array=(one two three)

if [ "one" in ${array} ]; then
...
fi
Run Code Online (Sandbox Code Playgroud)

Fra*_*ank 22

for循环可以解决这个问题.

array=(one two three)

for i in "${array[@]}"; do
  if [[ "$i" = "one" ]]; then
    ...
    break
  fi
done
Run Code Online (Sandbox Code Playgroud)

  • 欢迎来到SO Frank.很好的第一个答案 (2认同)

pep*_*uan 7

试试这个:

array=(one two three)
if [[ "${array[*]}" =~ "one" ]]; then
  echo "'one' is found"
fi
Run Code Online (Sandbox Code Playgroud)

  • 这是有效的,除非数组是'`array =(scone honest)`',它实际上不能说包含一个元素'one'但是会被`= ~`运算符匹配. (3认同)

use*_*own 5

我的.bashrc文件中有一个“包含”的函数:

contains () 
{ 
    param=$1;
    shift;
    for elem in "$@";
    do
        [[ "$param" = "$elem" ]] && return 0;
    done;
    return 1
}
Run Code Online (Sandbox Code Playgroud)

它可以很好地与数组配合使用:

contains on $array && echo hit || echo miss
  miss
contains one $array && echo hit || echo miss
  hit
contains onex $array && echo hit || echo miss
  miss
Run Code Online (Sandbox Code Playgroud)

但不需要数组:

contains one four two one zero && echo hit || echo miss
  hit
Run Code Online (Sandbox Code Playgroud)