确定Bash变量是否是多个值之一

时间:2014-04-12 17:08:16

标签: bash validation

假设Bash变量$x有三个有效值:foobarbaz。如何编写表达式来确定$x是否是这些值之一?例如,在Python中,可以写一下:

x in ('foo', 'bar', 'baz')

是否有Bash等价物,还是有必要进行三次比较?再次,在Python中,人们可以写:

x == 'foo' or x == 'bar' or x == 'baz'

在Bash中表达上述内容的正确方法是什么?

3 个答案:

答案 0 :(得分:6)

使用案例陈述:

var=bar
case $var in
  foo | bar | baz )
    echo "Matches"
    ;;
esac

答案 1 :(得分:6)

最简单的方法:

case $x in
    foo|bar|baz) echo is valid ;;
    *) echo not valid ;;
esac

有点复杂

shopt -s extglob
if [[ $x == @(foo|bar|baz) ]]; then
    echo is valid
else
    echo not valid
fi

更复杂:

is_valid() {
    local valid=( foo bar baz )
    local value=$1
    for elem in "${valid[@]}"; do
        [[ $value == $elem ]] && return 0
    done
    return 1
}

if is_valid "$x"; then
    echo is valid
else
    echo not valid
fi

答案 2 :(得分:1)

可以使用||[[]]之间进行更改:

if [[ $x == foo || $x == bar || $x == baz ]] ; then
  echo valid
else
  echo invalid
fi