我需要创建一个BASH条件来检查是否找到任何异常字符。如果任何字符不是其中之一,则条件返回true:c
,d
,f
,g
,h
,T
, ,
,?
,!
。 E.g:
if [[ "$variable" contains something that is not [cdfghZ,?!] ]]
then
echo "The variable contains an unknown character."
fi
如何检查具有BASH条件的列表中找不到的字符?
答案 0 :(得分:4)
您可以使用globbing
:
[[ "$variable" == *[^cdfghT,?\!]* ]]
PS: !
需要用作\!
来逃避历史事件扩展。
答案 1 :(得分:4)
Good old case
内置了这个,并且可以移植到所有Bourne shell。
case $variable in *[!cdfghZ,?!]* )
echo "The variable contains an unknown character." >&2 ;;
esac
答案 2 :(得分:3)
您可以使用正则表达式进行检查:
if [[ $variable =~ [^cdfghT,?\!] ]] ; then
...
答案 3 :(得分:2)
您可以使用扩展模式([[...]]
4.2中的bash
内默认使用扩展模式,但需要在早期版本中明确启用):
shopt -s extglob # if necessary
if [[ $variable != +([cdfghZ,?!]) ]]; then
模式+(...)
匹配包含一个或多个字符的字符串,每个字符必须与括号内的模式匹配。它基本上等同于正则表达式[cdfghZ,?!]+
。