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变量中,引用变量扩展会强制整个模式匹配为字符串。
你能告诉我完成这项任务的正确方法是什么吗?
答案 0 :(得分:1)
\s
不是bash
中可识别的字符类;您需要使用[[:blank:]]
代替:
if ! [[ "$(luajit -v)" =~ LuaJIT[[:blank:]]+"$LUAJIT_VERSION" ]]; then
(尾部.*
不是必需的,因为正则表达式不会锚定到字符串的开头或结尾。)
然而,目前尚不清楚你的正则表达式是否需要那么一般。看起来你可以使用单个文字空间
if ! [[ "$(luajit -v)" =~ LuaJIT\ "$LUAJIT_VERSION" ]];
或只是使用模式匹配:
if [[ "$(luajit -v)" != LuaJIT\ "$LUAJIT_VERSION"* ]];