在unix like系统的shell中,提供了很多操作字符串变量的灵活语法,我们接下来依次来看一看。

apple@kissAir: ~$path=$PATH

apple@kissAir: ~$echo $path

/opt/local/bin:/opt/local/sbin:/Users/apple/.rvm/gems/ruby-2.1.1/bin:/Users/apple/.rvm/gems/ruby-2.1.1@global/bin:/Users/apple/.rvm/rubies/ruby-2.1.1/bin:/Users/apple/.rvm/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/

local/bin:/opt/X11/bin

1 从左向右删除最短匹配字符串: ${var#key_str}

apple@kissAir: ~$echo ${path#/*sbin}

:/Users/apple/.rvm/gems/ruby-2.1.1/bin:/Users/apple/.rvm/gems/ruby-2.1.1@global/bin:/Users/apple/.rvm/rubies/ruby-2.1.1/bin:/Users/apple/.rvm/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/

local/bin:/opt/X11/bin

2 从左向右删除最长匹配字符串:${var##key_str}

apple@kissAir: ~$echo ${path##/*sbin}

:/usr/local/bin:/opt/X11/bin


3 从右向左删除最短匹配字符串:${var%key_str}

apple@kissAir: ~$echo ${path%/*bin}

/opt/local/bin:/opt/local/sbin:/Users/apple/.rvm/gems/ruby-2.1.1/bin:/Users/apple/.rvm/gems/ruby-2.1.1@global/bin:/Users/apple/.rvm/rubies/ruby-2.1.1/bin:/Users/apple/.rvm/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/

local/bin:/opt/X11

4 从右向左删除最长匹配字符串:${var%%key_str}

apple@kissAir: ~$echo ${path%%/*bin}

5 用key_str1替换第一个key_str0字符串:${var/key_str0/key_str1}

apple@kissAir: ~$echo ${path/sbin/SBIN}

/opt/local/bin:/opt/local/SBIN:/Users/apple/.rvm/gems/ruby-2.1.1/bin:/Users/apple/.rvm/gems/ruby-2.1.1@global/bin:/Users/apple/.rvm/rubies/ruby-2.1.1/bin:/Users/apple/.rvm/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/

local/bin:/opt/X11/bin

6 用key_str1替换所有的key_str0字符串:${var//key_str0/key_str1}

apple@kissAir: ~$echo ${path//sbin/SBIN}

/opt/local/bin:/opt/local/SBIN:/Users/apple/.rvm/gems/ruby-2.1.1/bin:/Users/apple/.rvm/gems/ruby-2.1.1@global/bin:/Users/apple/.rvm/rubies/ruby-2.1.1/bin:/Users/apple/.rvm/bin:/usr/bin:/bin:/usr/SBIN:/SBIN:/usr/

local/bin:/opt/X11/bin

7 若变量未赋过值则使用默认值,否则使用赋予的值: ${var-default_var}

apple@kissAir: ~$echo $var

apple@kissAir: ~$echo ${var-zero}

zero

apple@kissAir: ~$var=one

apple@kissAir: ~$echo $var

one


8 若变量为赋过值或其值为空字符串则使用默认值,否则使用赋予的值:${var:-default_var}

apple@kissAir: ~$var=

apple@kissAir: ~$echo ${var-null}

apple@kissAir: ~$echo ${var:-null}

null

apple@kissAir: ~$var=one

apple@kissAir: ~$echo $var

one


9 7和8的其他变形语法(摘自《鸟哥自学linux》):

10 待续 :)

unix下对于字符串变量的各种操作总结的更多相关文章

  1. UNIX下的环境变量--转载

    所有环境变量名都是大写小写,系统会当作shell script自定义变量,而不会当作环境变量 [root@mac-home macg]# echo $path                      ...

  2. unix下各种查看“变量”的命令比较

    子程序只会继承父程序的环境变量,而不继承其自定义变量. env 查看所有环境变量 set 查看所有变量,包括环境变量和自定义变量 set 还可以给程序位置参数赋值: set 1 2 3 将1赋值给$1 ...

  3. UNIX下的LD_PRELOAD环境变量

    UNIX下的LD_PRELOAD环境变量 也许这个话题并不新鲜,因为LD_PRELOAD所产生的问题由来已久.不过,在这里,我还是想讨论一下这个环境变量.因为这个环境变量所带来的安全问题非常严重,值得 ...

  4. [forward]警惕UNIX下的LD_PRELOAD环境变量

    From: https://blog.csdn.net/haoel/article/details/1602108 警惕UNIX下的LD_PRELOAD环境变量 前言 也许这个话题并不新鲜,因为LD_ ...

  5. js:把字符串转为变量使用; js下将字符串当函数去执行的方法

    1 把字符串当变量使用 通过计算 string 得到的值(如果有的话).该方法只接受原始字符串作为参数 demo: var type = "car"; var newStr = & ...

  6. GO语言的进阶之路-Golang字符串处理以及文件操作

    GO语言的进阶之路-Golang字符串处理以及文件操作 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 我们都知道Golang是一门强类型的语言,相比Python在处理一些并发问题也 ...

  7. c++字符串变量---8

    原创博客:转载请标明出处:http://www.cnblogs.com/zxouxuewei/ 一.字符串变量的定义 1>.对于C与C++来说是没有字符串型的数据类型的,在C++中是通过包含st ...

  8. Unix下五种IO模型

    http://blog.chinaunix.net/uid-25324849-id-247813.html 1. I/O模型 Unix下共有五种I/O模型 a. 阻塞I/O b. 非阻塞I/O c. ...

  9. otl库(以前不知道有这个库,并且还可以在Unix下使用)

    OTL介绍:OTL 是 Oracle, Odbc and DB2-CLI Template Library 的缩写,是一个C++编译中操控关系数据库的模板库,它目前几乎支持所有的当前各种主流数据库,例 ...

随机推荐

  1. Hadoop:hadoop fs、hadoop dfs与hdfs dfs命令的区别

    http://blog.csdn.net/pipisorry/article/details/51340838 'Hadoop DFS'和'Hadoop FS'的区别 While exploring ...

  2. Swift基础之Animation动画研究

    最近研究了一下,Swift语言中关于Animation动画的实现学习,分两次进行相关内容的讲解 用表格列出各种动画情况 Demo首页显示展示了一种动画显示方式,代码如下: //绘画装饰    func ...

  3. Android开发学习之路--Android Studio项目目录结构简介

    既然已经搭建好环境了,那就对Android Studio中项目目录结构做个简单的了解了,这里以最简单的Hello工程为例子,新建好工程后看如下三个工程视图: 1.Android工程 manifests ...

  4. Android必知必会--GreenDao缓存

    Github版 CSDN版 本篇文章不是介绍GreenDao的配置和基础使用,记录一下GreenDao缓存的问题,帮助遇到同样问题的朋友找到原因和方法,下面是示例: 场景重现 //第一次查询 List ...

  5. [C]simple code of count input lines,words,chars

    This is a simple C program which can count input lines, words and chars. But the number of words are ...

  6. tomcat请求路由映射核心组件Mapper

    Mapper组件的核心功能是提供请求路径的路由映射,根据某个请求路径通过计算得到相应的Servlet(Wrapper).这节看下Mapper的实现细节,包括Host容器.Context容器.Wrapp ...

  7. 套接字输入流——InputStream

    输入缓冲装置里面必须要包含读取字符的通道,否则就谈不上缓冲了,这个通道就是InputStream,它属于jdk中java.io包的类,有了它我们就可以从源头读取字符,它的来源可以有多种多样,这里主要探 ...

  8. Hessian源码分析--HessianProxy

    在上一篇博客 Hessian源码分析--HessianProxyFactory 中我们了解到,客户端获得的对象其实是HessianProxy生成的目标对象,当调用目标对象的方法时,会调用Hessian ...

  9. install_driver(Oracle) failed: Can't load `.../DBD/Oracle/Oracle.so' for module DBD::Oracle

    Description This section is from the "Practical mod_perl " book, by Stas Bekman and Eric C ...

  10. 【一天一道LeetCode】#83. Remove Duplicates from Sorted List

    一天一道LeetCode 本系列文章已全部上传至我的github,地址:ZeeCoder's Github 欢迎大家关注我的新浪微博,我的新浪微博 欢迎转载,转载请注明出处 (一)题目 Given a ...