如何检查变量是否包含BASH条件中列表中找不到的字符?

时间:2014-08-27 13:31:18

标签: bash

我需要创建一个BASH条件来检查是否找到任何异常字符。如果任何字符不是其中之一,则条件返回true:cdfghT,?!。 E.g:

if [[ "$variable" contains something that is not [cdfghZ,?!] ]]
then
    echo "The variable contains an unknown character."
fi

如何检查具有BASH条件的列表中找不到的字符?

4 个答案:

答案 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,?!]+