【问题标题】:Ubuntu bash script string contains similar wordsUbuntu bash 脚本字符串包含相似词
【发布时间】:2017-05-03 16:16:52
【问题描述】:

我正在尝试编写一个 bash 脚本来判断两个字符串是否具有相似的值。我制作了这个 bash 脚本:

#!/bin/bash
value="java.lang.NullPointerException"
if [[ "java.lang.NullPointerException" = "$value" || "java.lang.NullPointerException" == "$value"* ]]; then
   echo "Match"
fi

基本上我想要实现的是,如果两个字符串的值相等或任一侧非常相似但中间有匹配的文本,则回显“匹配”。

我尝试了许多资源,但无法让这个示例正常工作。我看过了:

  1. In bash, how can I check if a string begins with some value?
  2. How to test that a variable starts with a string in bash?
  3. https://ubuntuforums.org/showthread.php?t=1118003

请注意,这些值最终将来自文本文件,因此这些值将以变量的形式出现。我尝试了不同的方法,但似乎没有得到它的工作。我只想让这个 if 语句正常工作。它适用于匹配文本,但不适用于任何一方的值。值可以是“java.lang.NullPointerException: Unexpected”或“Unexpected java.lang.NullPointerException”。

【问题讨论】:

  • 你的操作数顺序错误:in="test this"; [[ "$in" = "test"* ]] && echo ok 工作正常(不需要额外的= 测试);它是必须用作带有*的模式的最短值
  • 谢谢。那行得通。
  • 不客气!我建议您删除您的问题,因为它现在已解决,并且只是对您链接到的问题的答案的错误实施。

标签: bash ubuntu


【解决方案1】:
#!/bin/bash
value="java.lang.NullPointerException" #or java.lang.NullPointerException: Unexpected
if [[ $value == *"java.lang.NullPointerException"* ]]; 
then
   echo "Match"
fi

【讨论】:

  • 虽然这可能是问题的答案,而提出问题的人可能会轻视它,但如果您可以对您所做的事情进行一些解释,那就太好了,这样也可以帮助更多的读者,这可能会偶然发现这个问题。
  • @derM 单线!在StackexchangeBash FAQ 上的Bash manualBash FAQ 中应该很容易找到解释。
  • @der: s/contempt/content/!
  • RTFM?如果它会那么明显,那么根本不需要这个问题。仍然有人问它,这基本上意味着:它并不那么明显。这些链接可能会有所帮助,但在 StackOverflow 上,如果在答案本身中添加了所有必要的详细信息,我们将不胜感激。据我所知,OP 不清楚这一事实,即您可以在搜索字符串前加上 *,并且这颗星也接受 0 字符。
  • @TobySpeight:你当然是对的!一个字母,主要区别。
【解决方案2】:

通配符匹配的一种简单且可移植(符合 POSIX 标准)的技术是使用 case 语句而不是 if。对于您的示例,这看起来像

#!/bin/sh
value="java.lang.NullPointerException"
case "$value" in
*java.lang.NullPointerException*) echo Match;;
esac

【讨论】:

    猜你喜欢
    • 2012-12-02
    • 1970-01-01
    • 2013-12-07
    • 2015-11-22
    • 1970-01-01
    • 2012-12-02
    • 1970-01-01
    • 1970-01-01
    • 2022-01-01
    相关资源
    最近更新 更多