我正在尝试检查 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 脚本还很陌生,因此我们将不胜感激。
如果这是 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)