如何检查字符串是不是包含子字符串并且在 Bash 中不包含 [重复]
Posted
技术标签:
【中文标题】如何检查字符串是不是包含子字符串并且在 Bash 中不包含 [重复]【英文标题】:How to check if a string contains a substring and does not in Bash [duplicate]如何检查字符串是否包含子字符串并且在 Bash 中不包含 [重复] 【发布时间】:2019-02-06 09:13:05 【问题描述】:我想在 bash 中使用 switch/case 语句来检查作为字符串的文件名是否包含某些内容但也不包含。
这是我的情况:
case "$fileName" in
*Failed|!cp*)
echo "match"
;;
esac
但是目前这不起作用,如何查看字符串是否匹配“失败”但也不包含“cp”?
如果这也能在 switch/case 中完成就好了
【问题讨论】:
|
in case 是 OR,而不是 AND。
我该如何做 AND?
Switch case with fallthrough? 可能重复另请参阅How to use Shellcheck、How to debug a bash script? (U&L.SE)、How to debug a bash script? (SO)、How to debug bash script? (AskU)、Debugging Bash scripts 等。
【参考方案1】:
!
后面必须跟一个带括号的模式列表,而不是模式本身。
|
在 case 中是 OR,而不是 AND。要获得 AND,您应该嵌套案例。
case "$fileName" in
*Failed)
case "$fileName" in
cp*) ;;
*) echo "match" ;;
esac
;;
esac
或者你可以只使用if
而不是case
:
if [[ $filename = *Failed && $filename != cp* ]]
then echo match
fi
【讨论】:
'extglob' 选项有什么用? 扩展通配符语法。【参考方案2】:您也可以使用if
和管道,例如:
if echo 'Failed' | grep -v cp | grep -q Failed ; then
echo Failed without cp
else
echo It's either Winned or cp.
fi
【讨论】:
以上是关于如何检查字符串是不是包含子字符串并且在 Bash 中不包含 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
如何检查一个对象是不是至少包含一个键,其值包含 JavaScript 中的子字符串?
如何检查字符串是不是包含 JavaScript 中的子字符串?
如何检查字符串是不是包含 JavaScript 中的子字符串?