假定Bash变量$x
有三个有效值:foo
,bar
和baz
。如何编写表达式以确定$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/