仅过滤 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 个或多个 r
或 w
或 x
字母。
在 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
"。
我正在尝试解析 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 个或多个 r
或 w
或 x
字母。
在 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
"。