首页 > 解决方案 > 如何测试字符串是否不包含bash中的指定字母

问题描述

在我正在编写的程序中,我需要检查一个字符串是否包含不在另一个字符串中的字符,例如:

if [ $string ?? "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789" ]; then
    echo $string isnt alphanumeric
fi

或者

if [ $string ?? "ABCDEGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"]; then
    echo $string isnt alphabetic
fi

??神秘行动在哪里。

任何帮助,将不胜感激!

标签: bash

解决方案


在 bash 中,with[[...]]==操作!=符是模式匹配操作符,所以

validChars="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"

if [[ $string != *["$validChars"]* ]]; then
    echo "$string does NOT contain any of $validChars"
fi

参考:https ://www.gnu.org/software/bash/manual/bash.html#index-_005b_005b


要测试一个字符串是否只包含 $validChars 中的字符,我们可以使用 bash 的扩展模式匹配

if [[ $string == +(["$validChars"]) ]]; then
    echo "$string ONLY contains chars in $validChars"
fi
if [[ $string != +(["$validChars"]) ]]; then
    echo "string is empty or contains some character not in $validChars"
fi

推荐阅读