【发布时间】:2018-09-20 12:16:23
【问题描述】:
luajit -v
LuaJIT 2.1.0-beta3 -- Copyright (C) 2005-2017 Mike Pall. http://luajit.org/
我想否定匹配版本部分,并在bash脚本的开头得到LUAJIT_VERSION="2.1.0-beta3"。我用:
if ! [[ "$(luajit -v)" =~ LuaJIT\s+"$LUAJIT_VERSION".* ]]; then
#rest of code
但它似乎不起作用是否我把$LUAJIT_VERSION放在""之间或没有:
可以引用模式的任何部分以强制将引用的部分匹配为字符串...如果模式存储在 shell 变量中,引用变量扩展会强制将整个模式匹配为字符串。
你能告诉我完成这项任务的正确方法是什么吗?
【问题讨论】:
-
我认为你不能在 Bash 正则表达式中使用
\s。 -
@BenjaminW。但它不是扩展正则表达式吗?
An additional binary operator, ‘=~’, is available, with the same precedence as ‘==’ and ‘!=’. When it is used, the string to the right of the operator is considered an extended regular expression and matched accordingly -
尝试使用
[[:blank:]]而不是\s -
是的,但
\s不是 ERE 的一部分。您可以改用字符类[[:blank:]]。对于最小的 POC:尝试[[ ' ' =~ \s ]] || echo "no match" -
\s更准确地描述为 Perl 兼容的正则表达式 (PCRE);它不是 POSIX 扩展正则表达式。