Linux shell:判断变量是否包含某个字符串的几种方法

2023-10-30

方法一:利用grep查找
strA="long string"
strB="string"
result=$(echo $strA | grep "${strB}")
if [[ "$result" != "" ]]
then
    echo "包含"
else
    echo "不包含"
fi

先打印长字符串,然后在长字符串中 grep 查找要搜索的字符串,用变量result记录结果,如果结果不为空,说明strA包含strB。如果结果为空,说明不包含。
这个方法充分利用了grep 的特性,最为简洁。


方法二:利用字符串运算符
strA="helloworld"
strB="low"
if [[ $strA =~ $strB ]]
then
    echo "包含"
else
    echo "不包含"
fi

利用字符串运算符 =~ 直接判断strA是否包含strB。(这不是比第一个方法还要简洁吗摔!)


方法三:利用通配符
A="helloworld"
B="low"
if [[ $A == *$B* ]]
then
    echo "包含"
else
    echo "不包含"
fi

这个也很easy,用通配符*号代理strA中非strB的部分,如果结果相等说明包含,反之不包含。


方法四:利用case in 语句
thisString="1 2 3 4 5"	# 源字符串
searchString="1 2"		# 搜索字符串
case $thisString in 
    *"$searchString"*) echo  "包含";;
    *) echo  "不包含" ;;
esac

这个就比较复杂了,case in 我还没有接触到,不过既然有比较简单的方法何必如此。


方法五:利用替换
STRING_A="helloworld"
STRING_B="low"
if [[ ${STRING_A/${STRING_B}//} == $STRING_A ]]
    then
        echo  "不包含"
    else
       echo  "包含"
    fi

这个也挺复杂。
如果到stackoverflow上看其实还有更多形式,不过基本都属于以上几类了。


本文转自https://www.cnblogs.com/willhua/articles/6141046.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Linux shell:判断变量是否包含某个字符串的几种方法 的相关文章

  • 如何从我自己的脚本向 Fish shell 提供制表符补全?

    我运行的是 Ubuntu 13 10 和 Fish 2 1 0 我想自己编写一个 Python 脚本来从命令行执行一些任务 该脚本将需要命令行参数 我怎样才能编写我的脚本 以便 Fish 可以请求并获取给定参数的可能值 潜在值列表是动态的
  • 在脚本内使用不带密码的 sudo

    由于某种原因 我需要作为用户在没有 sudo 的情况下运行脚本 script sh 该脚本需要 root 权限才能工作 我认为将 sudo 放入 script sh 中是唯一的解决方案 让我们举个例子 script sh bin sh su
  • 如何在 PHP 中运行 shell 脚本?

    我正在尝试使用 PHP 触发 shell 脚本的运行 本质上 当用户在我们用 PHP 编写的网站上完成一个操作时 我们希望触发一个 shell 脚本 该脚本本身调用一个 Java 文件 提前致谢 See shell exec http ph
  • 如何使用 sed 将空格替换为 \(space)?

    当我使用 sed 将所有空格替换为 X 时 该命令有效 命令为 sed s X g filelist tmp 但是 当我尝试用 space 替换所有出现的空格时 代码是 sed s g filelist tmp 这不起作用 我究竟做错了什么
  • Bash 脚本监听按键以继续

    因此 我想编写一个由一系列步骤组成的 bash 脚本 并将其标识为 task 然而 每个步骤都只能完成并且可以根据用户的需要运行 Do task1 if keypressed stop task1 and move on this is t
  • 在 UNIX 中删除相同的文件

    我正在处理大量 30 000 个 大小约为 10MB 的文件 其中一些 我估计 2 实际上是重复的 我只需要为每个重复的对 或三元组 保留一个副本 您能建议我一种有效的方法吗 我正在unix上工作 您可以尝试使用此代码片段在删除之前先获取所
  • 调用 cat 时 shell 脚本挂起

    我有一个 shell 脚本 它通过电子邮件向我发送通过 crontasks 遇到的错误 如下所示 exec gt output cat shopt s nocasematch if output error output warning t
  • Bash 参数引号和 eval

    我编写了一个 bash 日志记录库 用我公司当前正在使用的一些复杂脚本来实现 在进行日志调用时 我一直致力于提供调用脚本的脚本文件名 BASH SOURCE 和行号 LINENO 但是 我不想依赖用户或实现脚本来将这两个变量作为参数传递 如
  • 如果未设置,则从控制台读取 Makefile 变量

    我正在更新一个从外部源访问某些资源的 Makefile 即存在以下形式的规则 External cvs up 对于不受限制的资源 它可以按预期工作 现在 出现了功能漂移 外部资源需要更复杂的登录 因此规则已更改为与此没有太大不同的内容 Ex
  • shell中如何求数组的长度?

    shell中如何求数组的长度 例如 arr 1 2 3 4 5 我想得到它的长度 在本例中是 5 a 1 2 3 4 echo a 4
  • adb shell:无法使用 ESCAPE 键

    I want to use vi when running adb shell Starting vi is easy However I found that the ESC key doesn t seem to get through
  • 如何列出 nginx 中的所有虚拟主机

    有没有一个命令可以列出 CentOS 上 nginx 下运行的所有虚拟主机或服务器 我想将结果通过管道传输到文本文件以用于报告目的 我正在寻找与我用于 Apache 的命令类似的命令 apachectl S 2 gt 1 grep 端口 8
  • Bash - 比较 2 个文件列表及其 md5 校验和

    我有 2 个列表 其中包含带有 md5sum 检查的文件 即使文件相同 列表也具有不同的路径 我想检查每个文件的 md5 和 我们正在讨论数千个文件 这就是为什么我需要脚本来仅显示差异 第一个列表是普通列表 第二个列表是文件的当前状态 我想
  • 在 bash 中,如何除以两个变量并输出四舍五入到小数点后 5 位的答案? [复制]

    这个问题在这里已经有答案了 我将两个变量作为输入 将它们相除后 我希望将输出四舍五入到小数点后 5 位 我已经尝试过这种方法 gt sum 12 n 7 output scale 5 sum n bc echo output 我的代码没有显
  • 在 C# 中编写批处理脚本的好方法是什么?

    我想用 C 编写简单的脚本 我通常会使用 bat 或 4NT btm 文件 复制文件 解析文本 询问用户输入等等 相当简单 但在批处理文件中正确执行这些操作确实很困难 例如没有例外 我熟悉像 AxScript 这样的命令行 脚本 包装器 这
  • 将变量插入 sh 脚本命令[重复]

    这个问题在这里已经有答案了 bin sh f set proj dir OutputDir for projname in lib proj1 proj2 do mv scripts projname BYTECODE proj dir s
  • 将 apache documentRoot 设置为符号链接(以便于部署)

    我们正在寻找一种将 Apache DocumentRoot 指向符号链接的方法 例如 文档根目录 var www html finalbuild Finalbuild 应该指向 home user build3 之类的文件夹 当我们将新构建
  • PHP 日志文件颜色

    我正在编写一个 PHP 日志文件类 但我想为写入文件的行添加颜色 我遇到的问题是颜色也会改变终端的颜色 我想要实现的是仅更改写入日志文件的行的颜色 class logClass extends Singleton private funct
  • 使用 hcitool 扫描低功耗蓝牙?

    当我运行此命令时 BLE 设备扫描仅持续 5 秒 sudo timeout 5s hcitool i hci0 lescan 输出显示在终端屏幕中 但是 当我将输出重定向到文件以保存广告设备的地址时 每次运行该命令时 我都会发现该文件是空的
  • 在 bash 中快速引用 stdout(即上一个命令的输出)?

    有没有办法快速 例如通过键盘快捷键等 引用写入到 stdout 的上一个命令的输出 例如 如果我这样做 which rails 它回来了 usr local bin rails然后我想在 textmate 中打开该文件 我可以像这样重新输入

随机推荐

  • bat命令执行adb截屏指定设备以及保存

    参考 CMD命令行接收用户输入信息 利用bat命令实现adb截屏以及保存 在这篇文章的基础上添加了输入设备Id的功能 不要成为自己厌恶的那一类人 执行效果 echo off color a chcp 65001 title 截屏 echo
  • Swift基础语法快速浏览

    有些东西很简单 但是我还是把它记录了下来 文章目录 推荐阅读 基础语法快速浏览 基础 值类型转化 控制流 方法 类和对象 枚举和结构体 协议和扩展 错误处理 泛型 推荐阅读 the swift programming language sw
  • 五.Vim文档编辑

    文本编辑器的作用 创建或修改文本文件 维护Linux系统中的各种配置文件 Linux中最常用的文本编辑器 vi 类Unix系统中默认的文本编辑器 vim vi编辑器的增强版本 习惯上也称为vi 高亮显示 就是有颜色 root localho
  • 虚拟环境报错 virtualenv 不是内部或外部命令,也不是可运行的程序

    通过pip list 查询时显示安装成功 之前用过虚拟环境了 并没发生任何问题 查询是否有多个Python环境 我装了Anacoda 知道是环境冲突后 原本思路是删了环境变量 无用 是 管理员模式打开cmd 卸载了之前在普通用户权限下安装的
  • (C语言) 从键盘输入一个字符串,将其中的小写字母全部转换成大写字母,然后输出到一个磁盘文件"test"中保存,输入的字符以'!'结束

    从键盘输入一个字符串 将其中的小写字母全部转换成大写字母 然后输出到一个磁盘文件 test 中保存 输入的字符以 结束 define CRT SECURE NO WARNINGS include
  • LeetCode:39. 组合总和

    给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target 找出 candidates 中可以使数字和为目标数 target 的 所有 不同组合 并以列表形式返回 你可以按 任意顺序 返回这些组合 candidat
  • 硬盘突然变raw格式_分区变成RAW格式怎么办?手把手教你解决方法

    移动硬盘 U盘 硬盘 SD卡都是很常用的数据存储设备 用户在平时使用这些设备的时候难免会因各种原因而遇到一些问题 例如分区变成RAW格式 无法访问 提示格式化 误删除等 遇到这种情况 用户将无法读取数据 从而面临数据丢失的风险 其实 分区变
  • MYSQL5.7/MYSQL8.0迁移dm8字符乱码以及指定模式问题笔记总结

    开发一个项目 需要用dm8重构 使用了达梦自带的迁移工具 dm数据迁移工具 安装使用教程参考官网即可 安装前准备 达梦技术文档 dameng com 1 字符乱码问题解决 在迁移的过程中遇到了乱码 经过反复百度 也没有解决 后面经过反思 总
  • Java复习-12-继承、覆写与Annotation 注解

    继承与覆写 实例化子类对象时 会优先实例化其继承的父类对象 即子类构造方法中隐含了父类构造方法 java中的类继承不支持多重继承 但支持多层继承 并且对于个人编写的代码而言 理论上不应该超过三层 子类不能直接访问父类中的 private 的
  • 时序预测工具库(Prophet)介绍+代码

    时序预测工具库 Prophet 一 Prophet 简介 二 Prophet 适用场景 三 Prophet 算法的输入输出 四 Prophet 算法原理 五 与机器学习算法的对比 六 代码 6 1 依赖安装 6 2 预测demo 6 3 效
  • ARM汇编指令

    1 ARM寄存器那点知识 1 1 ARM处理器的八种工作模式 在ARMv8中加入了Monitor模式用于安全扩展 usr模式 正常程序运行时的模式 fiq模式 当配置有快速中断时 如果产生fiq时间 ARM核将会切换到该模式 irq模式 中
  • 使用Docker部署FastDFS集群

    FastDFS集群部署 1 下载FastDFS镜像 2 创建fastdfs主机映射目录 3 修改配置信息 4 运行tracker容器 5 运行storage容器 6 查看FastDFS监控状态 1 下载FastDFS镜像 docker pu
  • CUDA数组分配

    cuda内存分配真是乱啊 这次总结一下数组的分配 概述 数组分配可以通过cudaMallocArray 和cudaMalloc3DArray 1 cudaMallocArray cudaError t cudaMallocArray str
  • [Pytorch系列-50]:卷积神经网络 - FineTuning的统一处理流程与软件架构 - Pytorch代码实现

    作者主页 文火冰糖的硅基工坊 文火冰糖 王文兵 的博客 文火冰糖的硅基工坊 CSDN博客 本文网址 https blog csdn net HiWangWenBing article details 121363706 目录 第1章 关于F
  • DCMM数据能力成熟度评估模型--学习笔记(1)

    DCMM数据能力成熟度评估模型 学习笔记 1 DCMM简介 结构组成和成熟度评估等级划分 1 1 DCMM简介 1 2 DCMM结构组成 1 3 DCMM关键过程域 1 3 1 数据战略 指导方针 1 3 2 数据治理 机制保障 1 3 3
  • MySQL学习笔记

    我们经常用到的简单MySQL语句 做一个总结 对于没有基础的同学也有帮助 对于有基础的同学可以参考作为借鉴 狂神说Java 1 连接数据库语句 mysql h 服务器主机地址 u 用户名 p 用户密码 注意 p后面不能加空格 否则会被当做密
  • Servlet学习(六):Response对象

    1 Response设置响应数据功能介绍 HTTP响应数据总共分为三部分内容 分别是响应行 响应头 响应体 对于这三部分内容的数据 respone对象都提供了哪些方法来进行设置 响应行 对于响应头 比较常用的就是设置响应状态码 void s
  • docker Error response from daemon 解决

    docker Error response from daemon pull access denied for xxx repository does not exist or may require docker login denie
  • Android Studio 导入Eclipse项目

    将Eclipse项目或者其他的Android项目导入Android 会因为项目结构不一样 或者下载的grandle版本不一致 经常会导致import project卡死 解决的简单办法 首先 打开Android studio 然后impor
  • Linux shell:判断变量是否包含某个字符串的几种方法

    方法一 利用grep查找 strA long string strB string result echo strA grep strB if result then echo 包含 else echo 不包含 fi 先打印长字符串 然后在