检查 bash 脚本中的字符串格式

Hos*_*ser 1 bash grep

我正在尝试检查 bash 脚本中字符串开头的格式是否正确。

预期的格式如下所示,其中字符串必须始终以“ABCDEFG-”(精确的字母和顺序)开头,数字会有所不同,但至少为 3 位数字。第三位数字之后的所有内容都是无关的。预期的字符串开头:“ABCDEFG-1234”

我正在使用下面的代码片段。

[ $(echo "$str" | grep -E "ABCDEFG-[0-9][0-9][0-9]") ] && echo "yes"
Run Code Online (Sandbox Code Playgroud)

str1 =“ABCDEFG-1234”

str2 =“ABCDEFG-1234 - 更多文本”

当我使用 str1 代替 str 时,一切正常并且打印 yes 。

当我使用 str2 代替 str 时,出现以下错误

[: ABCDEFG-1234: unary operator expected
Run Code Online (Sandbox Code Playgroud)

我对使用 bash 脚本还很陌生,因此我们将不胜感激。

Cha*_*ffy 5

如果这是 bash,那么您根本没有理由为此使用 grep;shell 具有内置的正则表达式支持。

re="ABCDEFG-[0-9][0-9][0-9]"
[[ $str =~ $re ]] && echo "yes"
Run Code Online (Sandbox Code Playgroud)

也就是说,如果您希望在开头而不是内容中的任何位置进行匹配,您可能希望锚定正则表达式:

re="^ABCDEFG-[0-9][0-9][0-9]"
[[ $str =~ $re ]] && echo "yes"
Run Code Online (Sandbox Code Playgroud)

也就是说,这根本不需要是 ERE —— 全局样式的模式匹配也足够了:

if [[ $str = ABCDEFG-[0-9][0-9][0-9]* ]]; then echo "yes"; fi
Run Code Online (Sandbox Code Playgroud)