在SHELL编程中,经常要处理一些字符串变量。比如,计算长度啊、截取子串啊、字符替换啊等等,常常要用到awk、expr、sed、tr等命令。下面给大家介绍个简单的字符串处理方法,用不着嵌套复杂的子命令。

  1. ${#VALUE}:计算VALUE字符串的字符数量。
  2. ${VALUE%.*}${VALUE%%.*}:删除VALUE字符串中以分隔符“.”匹配的左边字符,保留右边字符。
  3. ${VALUE#*.}${VALUE##*.}:删除VALUE字符串中以分隔符“.”匹配的右边字符,保留左边字符。
  4. ${VALUE/OLD/NEW}${VALUE//OLD/NEW}:用NEW子串替换VALUE字符串中匹配的OLD子串。

补充:“*”表示通配符,用于匹配字符串将被删除的字串。“.”表示字符串中分隔符,可以为任意一个或多个字符。“%”表示从右向左匹配,“#”表示从左向右匹配,“\”表示替换,都属于非贪婪匹配,即匹配符合通配符的最短结果。与“%”、“#”和“/”类似的有“%%”、“##”和“//”,都属于贪婪匹配,即匹配符合通配符的最长结果。

  1. ${VALUE:OFFSET}${VALUE:OFFSET:LENGTH}:从VALUE字符串的左边开始中截取子串。
  2. ${VALUE:0-OFFSET}${VALUE:0-OFFSET:LENGTH}:从VALUE字符串的右边开始中截取子串。

补充:左边第一个字符从“0”开始,右边第一个字符从“0-1”开始。 表示偏移OFFSET个字符开始,LENGTH表示要截取字符的长度。如果没有LENGTH变量,表示偏移OFFSET个字符开始到字符串结束。

  1. ${VALUE:-WORD}:当变量未定义或者值为空时,返回值为WORD的内容,否则返回变量的值。
  2. ${VALUE:=WORD}:当变量未定义或者值为空时,返回WORD的值的同时并将WORD赋值给VALUE,否则返回变量的值。
  3. ${VALUE:+WORD}:当变量已赋值时,其值才用WORD替换,否则不进行任何替换。
  4. ${VALUE:?MESSAGE}:当变量已赋值时,正常替换。否则将消息MESSAGE送到标准错误输出(若此替换出现在SHELL程序中,那么该程序将终止运行)。

补充:WORD可以为一个字符串,也可以为一个变量。当为变量时,需要用“$”引用该变量。

SHELL字符串处理技巧(${}、##、%%)的更多相关文章

  1. shell字符串操作技巧

    操作字符串 -------------- Bash支持超多的字符串操作,操作的种类和数量令人惊异.但不幸的是,这些工具缺乏集中性. 一些是参数替换的子集,但是另一些则属于UNIX的expr命令.这就导 ...

  2. linux shell 字符串操作(长度,查找,替换)详解

    linux shell 字符串操作(长度,查找,替换)详解 在做shell批处理程序时候,经常会涉及到字符串相关操作.有很多命令语句,如:awk,sed都可以做字符串各种操作. 其实shell内置一系 ...

  3. Shell 字符串比较

    转自网络 Shell字符串比较 收藏 Shell 中整数比较方法及字符串的比较方法,如等于,不等于,大于,大于等于,小于,等等. 二元比较操作符,比较变量或者比较数字.注意数字与字符串的区别. --- ...

  4. shell字符串操作详解

    shell字符串操作详解的相关资料. 1.shell变量声明的判断  表达式 含义 ${var} 变量var的值, 与$var相同 ${var-DEFAULT} 如果var没有被声明, 那么就以$DE ...

  5. 【转】shell字符串截取

    shell字符串的截取的问题: 一.Linux shell 截取字符变量的前8位,有方法如下: 1.expr substr “$a” 1 8 2.echo $a|awk ‘{print substr( ...

  6. shell字符串的用法

    shell字符串的用法 注意:shell4.2和shell4.1会有差别,较低版本的shell可能不支持某些功能 获取字符串长度:${#string} 获取子串: 注:(左边的第一个字符是用 0 表示 ...

  7. Linux脚本shell字符串处理

    Linux脚本shell字符串处理,基本都有了,看着搜吧 TLDP教堂 shell中if条件字符串.数字比对,[[ ]]和[ ]区别 Linux 之 shell 比较运算符 Linux Shell编程 ...

  8. 【Linux】shell字符串分割、数组访问、条件判断

    参考资料: shell字符串分割再循环:http://www.shangxueba.com/jingyan/1633455.html linux shell中 if else以及大于.小于.等于逻辑表 ...

  9. shell 字符串中定位字符位置 获取字符位置

    linux shell 字符串操作(长度,查找,替换)详解 该博文中描述的如下两个字符串操作, ${string:position} #在$string中, 从位置$position开始提取子串 ${ ...

  10. Shell字符串操作

    @1:子串削除 ${string#substring} 从$string 的开头位置截掉最短匹配的$substring. ${string##substring} 从$string 的开头位置截掉最长 ...

随机推荐

  1. Spring Cloud与Docker微服务架构实战 PDF版 内含目录

    Spring Cloud与Docker微服务架构实战  目录 1 微服务架构概述 1 1.1 单体应用架构存在的问题1 1.2 如何解决单体应用架构存在的问题3 1.3 什么是微服务3 1.4 微服务 ...

  2. 【超分辨率】—(ESRGAN)增强型超分辨率生成对抗网络-解读与实现

    一.文献解读 我们知道GAN 在图像修复时更容易得到符合视觉上效果更好的图像,今天要介绍的这篇文章——ESRGAN: Enhanced Super-Resolution Generative Adve ...

  3. css样式writing-mode垂直书写测试

    writing-mode:控制文字的属性方向,但是不是所有的浏览器都兼容,在网页上使用时,有的浏览器显示不出该样式.该文测试的是垂直书写:网上对于测试的属性值的解释是:tb-rl:上-下,右-左.对象 ...

  4. Visual Studio 2019 社区版本离线安装

    官方指导 :https://docs.microsoft.com/en-us/visualstudio/install/create-an-offline-installation-of-visual ...

  5. 【GStreamer开发】GStreamer播放教程09——数字音频传输

    目标 本教程展示GStreamer是如何进行数字音频传输的. 介绍 在常见的模拟格式外,高端的音频系统通常都接受数字格式,压缩的非压缩的都能接受.因为音频信号是从电脑传到音箱,用一种更有弹性的形态会更 ...

  6. _string 灵活查询

    $process = (int)$_POST['process']; switch ($process) { case 0: // 全部 $where['_string'] = ' (`sale_wa ...

  7. redhat与zlib兼容性问题?

    今天在redhat 6.3 x64版本上安装了zlib,安装完后可以正常使用,就是发现gedit使用有点异常——无法启动,当时也没在意,但是后来重启电脑后出现桌面背景图片后就不弹出登陆窗口了,但是进命 ...

  8. redis服务操作

    端口启动服务./redis/redis-2.8.19/src/redis-server /redis/conf/r6100.conf./redis/redis-2.8.19/src/redis-ser ...

  9. Zuul【工作原理】

    zuul的核心逻辑都是由一系列filter过滤器链实现的,但是filter的类型不同,执行的时机也不同,效果自然也不一样,主要特点如下: filter的类型:filter的类型,决定了它在整个filt ...

  10. C之推栈溢出原因

    https://blog.csdn.net/weixin_36194037/article/details/78871468