在shell中只过滤三个字符

问题描述 投票:1回答:2

我试图在shell中解析一个命令,如果一个字符串有"r""w""x",其中一个,所有这些,或者混合,我只想在一个变量中保存一个选项,但只有这三个。不应该允许其他角色!

我试过一个案例:

 $2 in *r*) ;; *w*) ;; *x*) ;; *  ) echo no ;;
esac

但在这种情况下,如果有写zr它将通过,因为它有一个"r"。我只想让它通过,只要它有这三个中的一个,其中三个,或其中两个(任何一种组合),但没有其他字符。

bash shell parsing command
2个回答
1
投票

在BASH中,您可以使用正则表达式进行此检查,如下所示:

re='^[rwx]+$'

s='rw'
[[ $s =~ $re ]] && echo "yes" || echo "no"
yes

s='zr'
[[ $s =~ $re ]] && echo "yes" || echo "no"
no

正则表达式^[rwx]+$将允许一个或多个rwx字母。


0
投票

使用Bash(shopt -s extglob)中的扩展模式匹配:

if [[ $var == +([rwx]) ]]; then
    echo "Matches!"
else
    echo "Does not match!"
fi

+([rwx])模式是“rwx中的一个或多个”。

© www.soinside.com 2019 - 2024. All rights reserved.