2017-04-27 73 views
0

我想写一个bash脚本,它会告诉两个字符串是否具有相似的值。我公司生产的此bash脚本:Ubuntu的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

请注意,这些值最终会从一个文本文件,因此它们的值将是变量的形式。我尝试过不同的方法,但似乎没有得到它的工作。我只是想得到这个如果陈述工作。它适用于匹配文本,但不适用于任何一方的值。值可能是“java.lang.NullPointerException:Unexpected”或“Unexpected java.lang.NullPointerException”。

+0

你有你的操作数命令错误:'in =“test this”; [[“$ in”=“test”*]] && echo ok'正常工作(并且不需要额外的'='测试);这是最短的值,必须用作带'*'的模式 – Aaron

+0

谢谢。这工作。 –

+0

不客气!我建议你删除你的问题,因为它现在已经解决了,只是关于你所链接问题的答案的错误实现。 – Aaron

回答

0
#!/bin/bash 
value="java.lang.NullPointerException" #or java.lang.NullPointerException: Unexpected 
if [[ $value == *"java.lang.NullPointerException"* ]]; 
then 
    echo "Match" 
fi 
+0

虽然这可能是对这个问题的回答,并且被问到的人可能会鄙视它,但是如果你可以在你做的事情上添加一些解释,这将是很好的,所以它也可以帮助更多的读者,这可能会偶然遇到这个问题。 – derM

+0

@derM这是一个单行!应该很容易在[Bash手册](http://www.gnu.org/software/bash/manual/html_node/Conditional-Constructs.html#index-_005b_005b)上找到[Stackexchange](http ://stackoverflow.com/questions/669452/is-preferable-over-in-bash-scripts)或[Bash常见问题](http://mywiki.wooledge.org/BashFAQ/031)。 – ceving

+1

@der:'s/contempt/content /'! –

0

一个简单的和便携式(POSIX兼容)通配符匹配技术是使用case语句,而不是if。对于你的例子,这看起来像

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