如何使用bash匹配命令的版本=~&引用;?

如何使用bash匹配命令的版本=~&引用;?,bash,pcre,posix-ere,Bash,Pcre,Posix Ere,我想否定匹配版本部分,并在bash脚本的开头获得LUAJIT_version=“2.1.0-beta3”。我使用: luajit -v LuaJIT 2.1.0-beta3 -- Copyright (C) 2005-2017 Mike Pall. http://luajit.org/ 但无论我是否将$LUAJIT_VERSION放在之间,它似乎都不起作用,: 模式的任何部分都可以被引用,以强制引用的部分作为字符串进行匹配。。。如果模式存储在shell变量中,引用变量展开将强制将整个模式作为字

我想否定匹配版本部分,并在bash脚本的开头获得
LUAJIT_version=“2.1.0-beta3”
。我使用:

luajit -v
LuaJIT 2.1.0-beta3 -- Copyright (C) 2005-2017 Mike Pall. http://luajit.org/
但无论我是否将
$LUAJIT_VERSION
放在
之间,它似乎都不起作用

模式的任何部分都可以被引用,以强制引用的部分作为字符串进行匹配。。。如果模式存储在shell变量中,引用变量展开将强制将整个模式作为字符串进行匹配


您能告诉我执行此任务的正确方法吗?

\s
bash
中不是可识别的字符类;您需要使用
[[:blank:]

if ! [[ "$(luajit -v)" =~ LuaJIT\s+"$LUAJIT_VERSION".* ]]; then
#rest of code
(后面的
*
是不必要的,因为正则表达式没有锚定到字符串的开头或结尾。)


但是,还不清楚正则表达式是否需要如此通用。看起来您可以使用单个文本空间

if ! [[ "$(luajit -v)" =~ LuaJIT[[:blank:]]+"$LUAJIT_VERSION" ]]; then
或者简单地使用模式匹配:

if ! [[ "$(luajit -v)" =~ LuaJIT\ "$LUAJIT_VERSION" ]];

我认为在Bash正则表达式中不能使用
\s
。@BenjaminW。但这不是扩展的正则表达式吗<代码>提供了一个附加的二进制运算符“=~”,其优先级与“==”和“!=”相同。使用时,运算符右侧的字符串被视为扩展正则表达式,并相应匹配尝试使用
[[:blank:]]
而不是
\s
是,但
\s
不是ERE的一部分。您可以改用字符类
[[:blank:]
。对于最小的POC:try
[[''=~\s]]| | echo“no match”
\s
更准确地描述为Perl兼容的正则表达式(PCRE);它不是POSIX扩展正则表达式。
if [[ "$(luajit -v)" != LuaJIT\ "$LUAJIT_VERSION"* ]];