0
luajit -v
LuaJIT 2.1.0-beta3 -- Copyright (C) 2005-2017 Mike Pall. http://luajit.org/

我想否定匹配版本部分,并LUAJIT_VERSION="2.1.0-beta3"在 bash 脚本的开头得到。我用:

if ! [[ "$(luajit -v)" =~ LuaJIT\s+"$LUAJIT_VERSION".* ]]; then
#rest of code

但无论我是否$LUAJIT_VERSION介于两者之间,它似乎都"" 不起作用

可以引用模式的任何部分以强制将引用的部分匹配为字符串...如果模式存储在 shell 变量中,引用变量扩展会强制将整个模式匹配为字符串。

重击文档

你能告诉我完成这项任务的正确方法是什么吗?

4

1 回答 1

1

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

if ! [[ "$(luajit -v)" =~ LuaJIT[[:blank:]]+"$LUAJIT_VERSION" ]]; then

(尾随.*不是必需的,因为正则表达式没有锚定到字符串的开头或结尾。)


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

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

或者干脆使用模式匹配:

if [[ "$(luajit -v)" != LuaJIT\ "$LUAJIT_VERSION"* ]];
于 2018-04-10T19:17:07.903 回答