【问题标题】:ksh - check if String has a patternksh - 检查字符串是否有模式
【发布时间】:2018-08-21 07:12:32
【问题描述】:

我有一串命令如下:

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 是否存在于命令中。

【问题讨论】:

  • 使用 if [[ $ALCYONE_LAUNCHER_CMD = Dpersist+(' ')false ]] 是否有比 ' ' 更好的方式来表示空间,以及我该如何做标签也是
  • 感谢您的意见!试过它不起作用。看起来它不是正则表达式,它类似于 ksh 中的模式
  • 你为什么首先使用字符串而不是函数?

标签: shell scripting sh ksh


【解决方案1】:

解决方案 1:

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

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

解决方案 2:

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

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

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

资源

更多例子见

旁注

还可以查看ShellCheck,它有助于在您的 shell 脚本中发现错误。

【讨论】:

  • 解决方案一在多种情况下失败:1)ksh k.sh "a.sh -Dpersist true false" 2) ksh k.sh "a.sh -Dpersistfalse" 3) ksh k.sh " a.sh"
猜你喜欢
  • 2011-05-04
  • 1970-01-01
  • 1970-01-01
  • 2012-09-17
  • 1970-01-01
  • 1970-01-01
  • 2019-09-14
  • 2016-02-26
  • 2010-12-19
相关资源
最近更新 更多