ksh - 检查String是否有模式

时间:2018-03-13 05:59:59

标签: shell scripting sh ksh

我有一个如下命令字符串:

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 个答案:

答案 0 :(得分:1)

解决方案1:

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

Ksh的模式匹配与正则表达式不同,因为它总是匹配整个字符串 - 就像正则表达式一样,以^开头,以$结尾。 因此,您必须将带有星号的模式(用括号括起来)括起来。 *匹配任何字符序列。 每个模式前面的+表示匹配模式的一次或多次出现。

解决方案2:

另一种选择是使用=~运算符:

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

=~使用正则表达式语法。

资源

有关更多示例,请参阅

旁注

同时查看ShellCheck,它有助于在shell脚本中找到错误。