Arrays 如何在bash中从数组生成if条件

Arrays 如何在bash中从数组生成if条件,arrays,bash,if-statement,Arrays,Bash,If Statement,我有这样的if条件 if[“$var”!=“something”]&&&[“$var”!=“something 2”]&&[“$var”!=“something 3”]&&&[“$var”!=“something 4”];然后 #做点什么 fi 它检查$var是否不等于任何给定参数,然后相应地执行操作。然而,这个列表实际上比给定的示例要大得多,所以有没有一种方法可以将它们列在某个地方,并从该列表中进行检查,而不是单独添加它们? 我在网上发现的类似问题主要是数字,但我的数组列表将由字符串组成,因

我有这样的if条件

if[“$var”!=“something”]&&&[“$var”!=“something 2”]&&[“$var”!=“something 3”]&&&[“$var”!=“something 4”];然后
#做点什么
fi
它检查
$var
是否不等于任何给定参数,然后相应地执行操作。然而,这个列表实际上比给定的示例要大得多,所以有没有一种方法可以将它们列在某个地方,并从该列表中进行检查,而不是单独添加它们?
我在网上发现的类似问题主要是数字,但我的数组列表将由字符串组成,因此我不得不问这个问题。

使用一个关联数组,将可接受的值作为键:

#!/usr/bin/env bash
case $BASH_VERSION in ''|[1-3].*) echo "ERROR: Bash 4.0+ required" >&2; exit 1;; esac

declare -A values=(
  ["something"]=1
  ["something2"]=1
  ["something3"]=1
)

if [[ ${values[$var]} ]]; then
  : # do something
fi

使用具有可接受值的关联数组作为键:

#!/usr/bin/env bash
case $BASH_VERSION in ''|[1-3].*) echo "ERROR: Bash 4.0+ required" >&2; exit 1;; esac

declare -A values=(
  ["something"]=1
  ["something2"]=1
  ["something3"]=1
)

if [[ ${values[$var]} ]]; then
  : # do something
fi

为什么它们是数字还是字符串会有区别?逻辑是一样的。哪个版本的bash?你能依赖版本4或更高版本吗?@CharlesDuffy版本4.3.48(1)-release为什么它们是数字还是字符串会有区别?逻辑是一样的。哪个版本的bash?你能依赖版本4或更新版本吗?@CharlesDuffy版本4.3.48(1)-发布