Bash 在shell中只过滤三个字符
我试图在shell中解析一个命令,如果字符串具有Bash 在shell中只过滤三个字符,bash,shell,parsing,command,Bash,Shell,Parsing,Command,我试图在shell中解析一个命令,如果字符串具有“r”、“w”、“x”、其中一个、全部或混合,则我希望将其保存在变量中。不允许使用其他字符 我试过一个案例,其中: $2 in *r*) ;; *w*) ;; *x*) ;; * ) echo no ;; esac 但在这种情况下,如果写入了zr,它将通过,因为它有一个“r”。我只想让它通过,只要它有这三个字符中的一个、三个或两个(任何类型的组合),但没有其他字符。在BASH中,您可以使用regex进行如下检查: re='^[rwx]+$'
“r”
、“w”
、“x”
、其中一个、全部或混合,则我希望将其保存在变量中。不允许使用其他字符
我试过一个案例,其中:
$2 in *r*) ;; *w*) ;; *x*) ;; * ) echo no ;;
esac
但在这种情况下,如果写入了
zr
,它将通过,因为它有一个“r”
。我只想让它通过,只要它有这三个字符中的一个、三个或两个(任何类型的组合),但没有其他字符。在BASH中,您可以使用regex进行如下检查:
re='^[rwx]+$'
s='rw'
[[ $s =~ $re ]] && echo "yes" || echo "no"
yes
s='zr'
[[ $s =~ $re ]] && echo "yes" || echo "no"
no
Regex
^[rwx]+$
将允许1个或多个r
或w
或x
字母。在Bash中使用扩展模式匹配(shopt-s extglob
):
+([rwx])
模式是“一个或多个r
,w
或x
”请阅读。如果您了解正则表达式,它似乎应该是您想要的。r、w、x是权限,因此在这种情况下,我不想重复(在我的程序中,用户将写入权限,因此,如果用户写入“wzr”,它将只接受w和r,但如果用户写入“wxx”,它将只接受w和x,而不是2 x(无重复)。这是如何做到的?我认为这一要求与此问题非常不同。如果你发布一个新问题,会更好。
if [[ $var == +([rwx]) ]]; then
echo "Matches!"
else
echo "Does not match!"
fi