仅过滤 shell 中的三个字符

Filter only three characters in shell

我正在尝试解析 shell 中的命令,如果字符串具有 "r""w"、[=,我想在其中一个选项中保存在变量中14=],其中之一,所有,或混合,但只有这三个。不允许使用其他字符!

我试过一个案例:

  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]+$ 将允许 1 个或多个 rwx 字母。

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

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

+([rwx]) 模式是 "one or more of r, w or x"。