【转】shell 编程:冒号 后面跟 等号,加号,减号,问号的意义
原文网址:http://blog.csdn.net/trochiluses/article/details/9048539
缺省值(:-)
如果变量后面跟着冒号和减号,则变量后面跟着是这个变量的缺省值。
$ COMPANY=
$ printf “%s/n” “${COMPANY:-Unknown Company}”
Unknown Company
变量的实际值可以保持不变。
冒号也可以省略掉不用:
$ COMPANY=
$ printf “%s/n” “${COMPANY-Nightlight Inc.}”
$
指定缺省值(:=)
如果变量后面跟着冒号和等号,则给空变量指定一个缺省值。
$ printf “%s/n” “${COMPANY:=Nightlight Inc.}”
Nightlight Inc.
$ printf “%s/n” “$COMPANY”
Nightlight Inc.
变量的实际值已经改变了。
去除冒号,则不会指定缺省值。
变量是否存在检查(:?)
如果变量后面跟着冒号和问号,则根据变量是否存在,显示不同的信息。信息不是必选的。
printf “Company is %s/n” /
“${COMPANY:?Error: Company has notbeen defined—aborting}”
如果没有冒号则不会进行检查。
覆盖缺省值(:+)
如果变量后面跟着冒号和加号,则加好后面的字符串替换默认字符串。
$ COMPANY=”Nightlight Inc.”
$ printf “%s/n” “${COMPANY:+Company has been overridden}”
Company has been overridden
如果没有冒号,变量也被字符串所替换,变量本身的值不改变。
替换部分字符串(:n)
如果变量后面跟着一个冒号和数字,则返回该数字开始的一个子字符串,如果后面还跟着一个冒号和数字。则第一个数字表示开始的字符,后面数字表示字符的长度。
$ printf “%s/n” “${COMPANY:5}”
light Inc.
$ printf “%s/n” “${COMPANY:5:5}”
light
根据模板删除字串(%,#,%%,##)
如果变量后面跟着井号,则返回匹配模板被删除后的字串。一个井号为最小可能性的匹配,两个井号为自大可能性的匹配。表达式返回模板右边的字符。
$ printf “%s/n” “${COMPANY#Ni*}”
ghtlight Inc.
$ printf “%s/n” “${COMPANY##Ni*}”
$ printf “%s/n” “${COMPANY##*t}”
Inc.
$ printf “%s/n” “${COMPANY#*t}”
light Inc.
使用百分号,表达式返回模板左边的字符
$ printf “%s/n” “${COMPANY%t*}”
Nightligh
$ printf “%s/n” “${COMPANY%%t*}”
Nigh
(在我的Linux系统中上述命令不起取用)
使用模板进行子字符串的替换(//)
如果变量后只有一个斜杠,则两个斜杠中间的字符串是要被替换的字符串,而第二个斜杠后面的字符串是要替换的字符串。如果变量后面跟着两个斜杠,则所有出现在两个斜杠中间的字符都要被替换为最后一个斜杠后面的字符。
$ printf “%s/n” “${COMPANY/Inc./Incorporated}”
Nightlight Incorporated
$ printf “You are the I in %s” “${COMPANY//i/I}”
You are the I in NIghtlIght Inc.
如果模板一#号开始,则匹配以模板开始的字符,如果模板以%号结尾,则匹配以模板结尾的字符。
$ COMPANY=”NightLight Night Lighting Inc.”
$ printf “%s/n” “$COMPANY”
NightLight Night Lighting Inc.
$ printf “%s” “${COMPANY//Night/NIGHT}”
NIGHTLight NIGHT Lighting Inc.
$ printf “%s” “${COMPANY//#Night/NIGHT}”
NIGHTLight Night Lighting Inc.
(我的Linux中这个不起作用)
如果没有指定新的值,则匹配的字符会被删除。
$ COMPANY=”Nightlight Inc.”
$ printf “%s/n” “${COMPANY/light}”
Night Inc.
也可以使用范围符号。例如:删除所有字符串中的标点符号,使用范围[:punct:]。
$ printf “%s” “${COMPANY//[[:punct:]]}”
Nightlight Inc
使用星号或@符号替换变量会替换外壳脚本中所有的参数,同样,在数组中使用星号或@符号也会替换数组中的所有元素
【转】shell 编程:冒号 后面跟 等号,加号,减号,问号的意义的更多相关文章
- Linux Shell编程变量赋值和引用
我们可以使用任意一种文字编辑器,比如gedit.kedit.emacs.vi等来编写shell脚本,它必须以如下行开始(必须放在文件的第一行): #!/bin/sh ... 注意:最好使用“! ...
- Shell编程笔记
Shell编程笔记与Windows下熟悉的批处理类似,也可以将一些重复性的命令操作写成一个脚本方便处理. 修改别人的脚本,运行后遇到个问题 setenv: command not found 查证 ...
- 快速掌握Shell编程
作者原创作品,转载请注明出处 (一)Shell编程概述 1.1 shell简述 Shell编程和JavaScript非常相似,Shell和JavaScript都是弱类型语言,同时也都是解释型语言.解释 ...
- shell编程企业级实战
如何才能学好Shell编程 为什么要学习shell编程 Shell是Linux底层核心 Linux运维工作常用工具 自动化运维必备基础课程 学好shell编程所需Linux基础 熟练使用vim编辑器 ...
- shell编程中的 三种结构: 条件if/选择结构case/循环for/while/until等结构 和 函数的用法
shell 函数的使用 (md中, 列表本身是有格式的, 他要产生缩进, 其次,列表项和列表项之间, 可以留有一个空行, 是合法的, 允许的) shell函数,就是 就相当于一个命令来看待和处理的, ...
- shell 编程中的 知识点 - 突然一下子就明白很多东西了
按自己的意愿生活, 而且是::: 要敢于按自己的意志去活! 那是一种胆量和勇气!! shell中的结构, 只有选择(实际上if条件也是一种选择结构)和循环, 都是用关键字来替代 大括号的. 如: if ...
- shell编程(一)
迷迷糊糊中发现了一个学习shell的非常好的教程,从头到尾看了一下,等看完全忘记了,没办法只能记录下来,教程网址http://c.biancheng.net/cpp/view/6994.html 以前 ...
- shell编程变量赋值
[shell编程变量赋值] 1.等号两边均不能有空格存在.例, a="hello world" 2.变量和其它文字以{}或空格格开,否则会混淆.例, 有时候变量名可能会和其它文 ...
- 速查笔记(Linux Shell编程<下>)
转载自: http://www.cnblogs.com/stephen-liu74/archive/2011/11/04/2228133.html 五.BASH SHELL编程: 1. 初始化顺 ...
- Linux(15):shell 编程
shell基础 什么是 shell ? Shell是一个命令解释器,它的作用是解释执行用户输入的命令及程序等,用户输入一条命令, Shell 就解释执行一条. 这种从键盘一输入命令,就可以立即得到回应 ...
随机推荐
- 【运维技术】Nginx安装教程(yum安装,源码编译)
安装方式 yum直接更新源安装 源码直接编译之后安装 使用yum进行直接安装 Installing a Prebuilt CentOS/RHEL Package from an OS Reposito ...
- 20145315 《Java程序设计》第一周学习总结
20145315 <Java程序设计>第一周学习总结 教材学习内容总结 第一章 java原来以橡树为名,后来才改成java,灵感是咖啡. 作者戏称JDK为java developer ki ...
- 再也不学AJAX了!(三)跨域获取资源 ③ - WebSocket & postMessage
让我们先简单回顾一下之前谈到的内容,AJAX是一种无页面刷新的获取服务器资源的混合技术.而基于浏览器的"同源策略",不同"域"之间不可以发送AJAX请求.但是在 ...
- NOIP 2018 兔纸旅游记
今年是第一次参加tg呢... Day0 早上出发去中旅坐大巴,走有 lz 特色的OI比赛道路. 车上谈笑风生,看 jw 的 GDOI 的小本本. 到动车站取票入站,看 lmh 和 zn 的爱恨情 ...
- java 生成验证Guid码
- Matplotlib 练习题
1. 绘制一个二维随机漫步的图形 直接上代码: %pylab inline nsteps = 1000 draws = np.random.randint(-1,2,size=(2,nsteps)) ...
- c++ 判断list是否为空(empty)
#include <list> #include <iostream> using namespace std; int main() { list<int> nu ...
- [QT]QApplication和QCoreApplication的用法
转自:http://www.tuicool.com/articles/qmI7Bf 故事的背景是这样的,我们在写QT程序的时候或者在开始写QT程序之前总会看到这样的语句 QApplication ap ...
- Missing artifact com.github.pagehelper:pagehelper:jar:3.4.2-fix的解决方法
使用pagehelper.3.4.2.jar时报错,应该是无法从网络上下载该jar. 我的解决方案是: 从网络上下载一个pagehelper.3.4.2.jar包,然后复制到.m2目录中 如我的目录是 ...
- FastJson/spring boot: json输出方法二
1.引入FastJson依赖包 <!-- FastJson --> <dependency> <groupId>com.alibaba</groupId> ...