Linux Shell脚本 - 使用通配符进行字符串比较

27 浏览
0 Comments

Linux Shell脚本 - 使用通配符进行字符串比较

我正在尝试在Shell脚本(#!bin/sh)中判断一个字符串是否是另一个字符串的一部分。

我现在的代码是:

#!/bin/sh
#用于测试字符串比较的测试脚本!
testFoo () {
        t1=$1
        t2=$2
        echo "t1: $t1 t2: $t2"
        if [ $t1 == "*$t2*" ]; then
                echo "$t1 和 $t2 相等"
        fi
}
testFoo "bla1" "bla"

我想要的结果是,当"bla"存在于"bla1"中时,我想知道它的存在。

谢谢和问候,

更新:

我尝试了在How do you tell if a string contains another string in Unix shell scripting?中描述的"contains"函数,以及String contains in bash中的语法。

然而,它们似乎与正常的Shell脚本(bin/sh)不兼容...

有办法解决吗?

0
0 Comments

Linux Shell脚本-使用通配符进行字符串比较

在bash中使用==!=进行字符串比较时,可以这样写:

if [[ $t1 == *"$t2"* ]]; then
    echo "$t1 and $t2 are equal"
fi

注意星号放在引号的外部,并且通配符模式必须在右侧。

对于/bin/sh,=操作符仅用于相等性,而不是模式匹配。但可以使用case进行模式匹配:

case "$t1" in
    *"$t2"*) echo t1 contains t2 ;;
    *) echo t1 does not contain t2 ;;
esac

如果你特别针对Linux,我会假设存在/bin/bash。

非常感谢Glenn!非常感谢!(并且这是一个Linux环境,但非常轻量级,没有/bin/bash,所以我真的需要/bin/sh版本!- 再次感谢!)

比起使用case,使用=~操作符更好:if [[ $t1 =~ %t2* ]]; the echo match; fi,

对于正则表达式,你需要[[ $t1 =~ "$t2" ]]

对,除了一个拼写错误(%t2而不是$t2),sh实际上可能不支持双括号[[ ]]。

哦,这真是太令人费解了!谢谢,现在我明白了。

关于bash,没有太多的直观。

谢谢,我只是在学习,并且我犯了与这个问题的作者完全相同的错误,例如在引号之间放置通配符。

jackman,嘿伙计,你能帮我完成我的脚本吗?我在获取*856*时遇到了麻烦,因为*是一个通配符。这是我的脚本:findFile() { while read -r LINE; do printf "$LINE\n"; grep -il '$LINE' *856*; done < /path/to/file.txt }

注意,顺序很重要:通配符需要在比较的右侧...至少根据我的经验如此。

0