我试图在shell中解析一个命令,如果一个字符串有"r"
,"w"
,"x"
,其中一个,所有这些,或者混合,我只想在一个变量中保存一个选项,但只有这三个。不应该允许其他角色!
我试过一个案例:
$2 in *r*) ;; *w*) ;; *x*) ;; * ) echo no ;;
esac
但在这种情况下,如果有写zr
它将通过,因为它有一个"r"
。我只想让它通过,只要它有这三个中的一个,其中三个,或其中两个(任何一种组合),但没有其他字符。
在BASH中,您可以使用正则表达式进行此检查,如下所示:
re='^[rwx]+$'
s='rw'
[[ $s =~ $re ]] && echo "yes" || echo "no"
yes
s='zr'
[[ $s =~ $re ]] && echo "yes" || echo "no"
no
正则表达式^[rwx]+$
将允许一个或多个r
或w
或x
字母。
使用Bash(shopt -s extglob
)中的扩展模式匹配:
if [[ $var == +([rwx]) ]]; then
echo "Matches!"
else
echo "Does not match!"
fi
+([rwx])
模式是“r
,w
或x
中的一个或多个”。