如何使用bash“=〜”匹配命令的版本?

时间:2018-04-10 18:55:33

标签: bash pcre posix-ere

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 docs

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

1 个答案:

答案 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"* ]];