我正在尝试查看一个字符串是否是shell脚本中另一个字符串的一部分()!BI/SH)。
我现在的代码是:
#!/bin/sh
#Test scriptje to test string comparison!
testFoo () {
t1=$1
t2=$2
echo"t1: $t1 t2: $t2"
if [ $t1 =="*$t2*" ]; then
echo"$t1 and $t2 are equal"
fi
}
testFoo"bla1""bla"
我要寻找的结果是,我想知道"bla1"中何时存在"bla"。
谢谢,谨致问候,
更新:我尝试了这里描述的"contains"函数:如何在UnixShell脚本中判断一个字符串是否包含另一个字符串?
以及bash中字符串包含的语法
但是,它们似乎与普通shell脚本(bin/sh)不兼容…
帮助?
检查stackoverflow.com/questions/229551/string-contains-in-bash
同样的问题和答案在这里:stackoverflow.com/questions/229551/string-contains-in-bash stackoverflow.com/questions/2829613/…
在bash中,您可以编写(注意星号在引号之外)
if [[ $t1 == *"$t2"* ]]; then
echo"$t1 and $t2 are equal"
fi
对于/bin/sh,=运算符仅用于相等,不用于模式匹配。不过,您可以使用EDOCX1[1]
case"$t1" in
*"$t2"*) echo t1 contains t2 ;;
*) echo t1 does not contain t2 ;;
esac
如果您专门针对Linux,那么我假设存在/bin/bash。
谢谢一群格伦!非常感谢!(这是一个Linux环境,但是非常轻量,没有/bin/bash,所以我真的需要那个/bin/sh版本!-再次感谢!)
+一提起案件。
比处理案例更好,使用=~operator:if[[$T1=~%T2*];echo匹配;fi
@lef,对于正则表达式,需要[[ $t1 =~"$t2" ]]。
@格伦,对了,除了错别字(%t2而不是$t2),sh实际上可能不支持双括号[]
天哪,这太违反直觉了!谢谢,现在一切都有意义了。
@亚历克斯对巴什没有什么直觉
@感谢你,我只是在学习,我犯了和这个问题的作者完全一样的错误,比如在语音标记之间加上通配符。
@格伦·杰克曼,嘿,巴德,你能帮我完成剧本吗?我很难得到*856*,因为*是通配符。这是我的剧本:findFile() { while read -r LINE; do printf"$LINE
"; grep -il '$LINE' *856*; done < /path/to/file.txt }
注意,顺序很重要:王牌需要放在比较的右边…至少从我的经验来看。