Regex 如何检查字符串是否包含特定字符

Regex 如何检查字符串是否包含特定字符,regex,string,bash,contains,Regex,String,Bash,Contains,我一直在尝试在bash脚本中创建一个条件,该条件将告诉我给定的字符串是否包含字母或连字符以外的字符 i、 这是一个合法字符串:hello world 而那个不是:hello-123-there 这是我迄今为止尝试过的,但我认为我也有一个逻辑错误: if ! [[ "$1" == *-* ]] && ! [[ "$1" =~ ^[a-zA-Z]+$ ]] ; then echo "the line is bad" exit fi (当然,$1指的是

我一直在尝试在bash脚本中创建一个条件,该条件将告诉我给定的字符串是否包含字母或连字符以外的字符

i、 这是一个合法字符串:
hello world

而那个不是:
hello-123-there

这是我迄今为止尝试过的,但我认为我也有一个逻辑错误:

if ! [[ "$1" == *-* ]] && ! [[ "$1" =~ ^[a-zA-Z]+$ ]] ; then
        echo "the line is bad"
        exit
fi
(当然,$1指的是字符串)。
希望得到您的帮助。

您可以使用BASH的正则表达式功能:

[[ "$str" =~ ^[a-zA-Z-]*$ ]] && echo "valid" || echo "invalid"
或使用glob:

[[ "$str" == *[^-[:alpha:]]* ]] && echo "invalid" || echo "valid"
这与:

if [[ "$str" =~ ^[a-zA-Z-]*$ ]]; then
    echo "valid"
else
    echo "invalid"
fi

谢谢,但是-我不懂“&&”和“| |”的用法,你能写下条件吗?谢谢。这就是你要找的吗?普通glob模式也有效:
[$str==*[^-[:alpha:]*]]&&echo invalid
正确@glennjackman。也感谢您使用此选项编辑答案。