${varname:-word}

如果varname存在并且不为nil,那么返回varname的值,否则返回word。这个常用来在varname未定义时返回默认值

${varname:=word}

如果varname存在并且不为nil,那么返回varname的值,否则将varname的值设置为word并且返回该值。这个常用来对变量设置默认值

${varname:?message}

如果varname存在并且不为nil,那么返回varname的值,否则打印varname:message,并且中断脚本(只有在non-interactive shell下成立)

${varname:+word}

如果varname存在并且不为nil,返回word,否则返回nil

${varname:offset:length}

从offset开始,截取长度为length的子串,其中字符串的序号从0开始算,有以下几种特殊情况:

1 若不指定length,则一直截取到整个字符串末尾

2 若offset为负数,从字符串末尾开始往后数offset个字符,然后截取length个字符;如果不指定length,那么一直截取到整个字符串末尾,比如:

name=abcdef
${name: -:} 输出de
${name: -} 输出def

这里需要注意的是,此时-与:之间有空格,目的是让shell区分${varname:-word}这种形式

3 如果varname是*或者@,那么就是从第offset个position parameter开始,截取length个,如果不指定length,那么就一直截取到最后一个position parameter

${varname#pattern}

从varname的开头开始匹配,然后删除最短的匹配项,将剩余的字符串返回

${varname##pattern}

从varname的开头开始匹配,然后删除最长的匹配项,将剩余的字符串返回

${varname%pattern}

从varname的末尾开始匹配,然后删除最短的匹配项,将剩余的字符串返回

${varnam%%pattern}

从varname的末尾开始匹配,然后删除最长的匹配项,将剩余的字符串返回

${varname/pattern/string}

将第一个最长的匹配项替换为string,若string为nil,则删除该匹配项

${varname//pattern/string}

将所有最长的匹配项替换为string,若string为nil,则删除该匹配项

在上面两种替换模式中,如果pattern以#开头,那么就是从varname开头进行匹配;如果varname为*或者@,那么替换就是依次对每一个position parameter进行。

shell的string operator的更多相关文章

  1. shell tips

    1.shopt 命令可以设置shell的可选参数 shopt [-psu] [optname...] -s 开启某个选项 -u 关闭某个选项 -p 列出所有可设置的选项 其中开启extglob选项,s ...

  2. C++ string 用法详解

    /////////////////////////////////////////////////////////////////////////////////// 任何人对本文进行引用都要标明作者 ...

  3. C++中的string类(1)

    http://blog.sina.com.cn/s/blog_51409e8f01009h7g.html 前言: string 的角色1 string 使用1.1 充分使用string 操作符1.2 ...

  4. 标准库String类

    下面的程序并没有把String类的所有成员方法实现,只参考教程写了大部分重要的成员函数. [cpp] view plain copy #include<iostream> #include ...

  5. 自己实现简单的string类

    1.前言 最近看了下<C++Primer>,觉得受益匪浅.不过纸上得来终觉浅,觉知此事须躬行.今天看了类类型,书中简单实现了String类,自己以前也学过C++,不过说来惭愧,以前都是用C ...

  6. C++ string类的实现

    c++中string类的实现 今天面试被考到了, 全给忘记了!!!   //string类的实现 #include <iostream> #include <string.h> ...

  7. string的实现

    面试常常用到string类的实现,自己总结了一下: #pragma once #include <iostream> #include <cassert> #include & ...

  8. 标准C++中的string类的用法总结

    标准C++中的string类的用法总结 相信使用过MFC编程的朋友对CString这个类的印象应该非常深刻吧?的确,MFC中的CString类使用起来真的非常的方便好用.但是如果离开了MFC框架,还有 ...

  9. c++:string函数

    string类的构造函数:string(const char *s);    //用c字符串s初始化string(int n,char c);     //用n个字符c初始化此外,string类还支持 ...

随机推荐

  1. Jquery 学习插件第一天

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8" /> <title&g ...

  2. JS encode decode

    网上查到的全都是escape,和需要的编码不是一回事,好不容易找到的结果 保存下来以备以后使用 js对文字进行编码涉及3个函数:escape,encodeURI,encodeURIComponent, ...

  3. C#中的委托和事件2-1(转)

      PDF 浏览:http://www.tracefact.net/Document/Delegates-and-Events-in-CSharp.pdf引言 委托 和 事件在 .Net Framew ...

  4. 转:MFC创建多线程实例

    作者:http://blog.csdn.net/wangningyu/article/details/4404134 平时在MFC里使用多线程时其实是很方面的,因为微软提供了一个API让我们很方面的去 ...

  5. 转:窗口启用/禁用功能函数EnableWindow的使用

    在非MFC环境中如何使控件或者窗口禁用呢?起初是想通过发送消息来实现,但找来找去都木有找到控件禁用的消息(也是是博主木有找到的缘故),所以只能另辟蹊径,使用 EnableWindow这个函数, 该函数 ...

  6. 委托 delegate, 继承

    c# 的委托就是说把函数当参数来传递. 这个在js完全就用不着搞什么委托东西,直接转就是了嘛.对不对!怎么录嘛! 一个函数,如果它的参数是函数,那么是这样子写的 public void method( ...

  7. 优秀的VeriSign和混蛋的GlobalSign

    由于领导不懂行,直接购买了GlobalSign的证书,结果引起了我这个开发人员痛苦的2星期之旅,说说大体情况: 目的:对买来的一个驱动程序进行签名,使之能够在Win x64情况下安装和使用 下载Win ...

  8. rsyslog 只读取变化的日志

    <pre name="code" class="html">input(type="imfile" File="/us ...

  9. HDU_2136——最大质因数,素数筛选法

    Problem Description Everybody knows any number can be combined by the prime number. Now, your task i ...

  10. iOS单元测试(作用及入门提升)

    由于只是一些简单实用的东西,学学还是挺不错的.其实单元测试用的好,开发起来也会快很多.单元测试对于我目前来说,就是为了方便测试一些功能是否正常运行,还有调试接口是否能正常使用.有时候你可能是为了测试某 ...