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

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

是否有等效的Bash,还是有必要执行三个比较?同样,在Python中,人们可以这样写:
x == 'foo' or x == 'bar' or x == 'baz'

用Bash表达以上内容的正确方法是什么?

最佳答案

最简单的方法:

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

关于bash - 确定Bash变量是否为多个值之一,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23033561/

10-14 06:13