【转】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 就解释执行一条. 这种从键盘一输入命令,就可以立即得到回应 ...
随机推荐
- 【运维技术】VM虚拟机上使用centos7安装docker启动gogs服务教程【含B站视频教程】
VM虚拟机上使用centos7安装docker启动gogs服务视频教程 BiliBili视频教程链接飞机票,点我 使用VMware Workstation安装Centos7 MinMal系统 第一步: ...
- Web开发相关笔记 #03#
HTTP Status 500 ※ jsp 放在 WEB-INF 外面 ※ 使用 JDBC 时需要 close 什么 ※ execute 和 executeUpdate ※ How can I ...
- Python3 pandas用法大全
Python3 pandas用法大全 一.生成数据表 1.首先导入pandas库,一般都会用到numpy库,所以我们先导入备用: import numpy as np import pandas as ...
- 20145326 《Java程序设计》第9周学习总结
20145326 <Java程序设计>第9周学习总结 教材学习内容总结 第十六章 一.JDBC入门 1.JDBC简介 JDBC是用于执行SQL的解决方案,开发人员使用JDBC的标准接口,数 ...
- POJ 1062 昂贵的聘礼(最短路)题解
题意:中文题意不解释... 思路:交换物品使得费用最小,很明显的最短路,边的权值就是优惠的价格,可以直接用Dijkstra解决.但是题目中要求最短路路径中任意两个等级不能超过m,我们不能在连最短路的时 ...
- 使用git一张图就够了
现在,版本控制工具中,git逐步成为主流.他的分散式的特性是它超越svn渐渐独霸江湖.如果你还不熟悉git,通过本文,你有个最基本最实用的理解:如果你熟悉git,温故而知新,为你加深对git的理解 g ...
- 小图标变为字体@font-face
https://www.zhihu.com/question/29054543 https://icomoon.io/app/#/select http://iconfont.cn/
- MySQL数据库安装和Navicat for MySQL配合使用
MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下公司. MySQL 最流行的关系型数据库管理系统,在 WEB 应用方面MySQL是最好的 RDBMS ...
- 由 '' in 'abc' return True 引发的思考----Python 成员测试操作
最近遇到判断字典中是否存在空字符串‘’,这个很好判断,直接用:‘’ in ['a','b','c'],就可以直接判断出来:但是当我对字符串使用 “in” 方法进行判断的时候,发现:‘’ in ‘abc ...
- WCF技术
在WCF数据访问中使用缓存提高Winform字段中文显示速度 伍华聪 2014-09-06 12:50 阅读:2507 评论:1 WCF开发框架之插件化应用模式升级 伍华聪 2013-07 ...