代码之家  ›  专栏  ›  技术社区  ›  Ajeetkumar

ksh-检查字符串是否有模式

  •  2
  • Ajeetkumar  · 技术社区  · 7 年前

    我有一系列命令,如下所示:

    CMD_LAUNCH="launch.sh \
        -v $ABC_VERSION \
        -p something \
        -X $MAX_HEAP_SPACE_PARAM \
        -Dpersist false \
        -DanotherPasram Abc"
    

    我将在ksh中启动此命令,如下所示:

    $CMD_LAUNCH
    

    如何确保命令 -Dpersist false ?

    我想讨论在-Dpersist和false之间不能有空格的情况。但我的尝试没有做到这一点。

    尝试1)

    if [[ "$CMD_LAUNCH" = *"Dpersist\s+false"* ]]
    then
            echo "It's there!"
    else
            echo "It's not there!"
    fi
    

    我想测试一下 Dpersist false 命令中存在。

    1 回复  |  直到 7 年前
        1
  •  2
  •   rkta    7 年前

    解决方案1:

    if [[ "$CMD_LAUNCH" == *+(Dpersist+(\s)false)* ]]
    then
            echo "It's there!"
    else
            echo "It's not there!"
    fi
    

    Ksh的模式匹配与regex不同,因为它总是匹配从 ^ 并以结尾 $ 。 因此,必须用星号将图案括起来,图案本身用括号括起来。这个 * 匹配任意字符序列。 这个 + 每个图案前面表示匹配图案的一个或多个引用。

    解决方案2:

    另一种选择是使用 =~ 操作员:

    if [[ "$CMD_LAUNCH" =~ Dpersist\s+false ]]                                            
    then
        echo "Its there!"
    else
         echo "Its not there!"
    fi
    

    =~ 使用regex语法。

    资源

    有关更多示例,请参见

    旁注

    也请查看 ShellCheck ,它有助于在shell脚本中查找错误。