Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 在shell中只过滤三个字符_Bash_Shell_Parsing_Command - Fatal编程技术网

Bash 在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]+$'

我试图在shell中解析一个命令,如果字符串具有
“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