${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. IRP派遣操作

    IRPTrace工具跟踪IRP 派遣函数(Dispathc Funtion)是windows驱动中的重要概念.驱动程序的主要功能是负责处理I/O请求,其中大部分I/O请求是在派遣函数中处理的.用户模式 ...

  2. 汇编下的i++与++i

    故事背景,一个正在c语言的家伙,问我++i 和 i++的问题,我当时因为要去上课没给他说,正好今晚有空就测试了一下如下代码: 编译环境:VS2010  语言:C++ #include <iost ...

  3. c#使用spy进行模拟操作

    很无奈,写了很长时间,最后保存时网页失去响应,真是要命呢.本来想就此放弃了,但是想还是粗略的重写一次吧,希望日后可以对朋友有一定的帮助. Microsoft.Spy工具是一个基础工具,我们简要介绍一下 ...

  4. ural 1572 Yekaterinozavodsk Great Well

    #include <cstdio> #include <cstring> #include <cmath> #include <algorithm> # ...

  5. SQLiteDatabase里面的简单操作数据库的方法

    1.使用insert方法插入记录SQLiteDatabase的insert方法的签名为long insert(String table,String nullColumnHack,ContentVal ...

  6. PCB走线和过孔的过流能力

    PCB走线的载流能力与以下因素有关:线宽.线厚(铜箔厚度).容许温升.PCB走线越宽,载流能力越大. 近似计算公式: I=KT0.44A0.75 (K为修正系数,一般覆铜线在内层时取0.024,在外层 ...

  7. BZOJ2079: [Poi2010]Guilds

    2079: [Poi2010]Guilds Time Limit: 10 Sec  Memory Limit: 259 MBSubmit: 237  Solved: 181[Submit][Statu ...

  8. iOS 9之分屏多任务(Split View)

    金田(github 示例源码) 多任务(multitasking)算是iOS9中最引人瞩目的核心新特性了,之前越狱版用户就用过类似的插件,微软的 苏菲 (Windows Surface)系列也有分屏多 ...

  9. HDU 5505 - BestCoder Round #60 - GT and numbers

    题目链接 : http://bestcoder.hdu.edu.cn/contests/contest_chineseproblem.php?cid=641&pid=1002 思路 : N有若 ...

  10. JDBC之ResultSet

    ResultSet is a interface More gnerally,ResultSet is a class involves a table returned by executeQuer ...