[Shell学习笔记]字符串操作

原创 2016年05月31日 21:30:53
1. 判断读取字符串值


表达式 含义
${var} 获取变量var的值(与$var相同)
${var-DEFAULT} 如果var没有声明,则以$DEFAULT作为其值
${var:-DEFAULT} 如果var没有声明或者为空值,则以$DEFAULT作为其值
${var=DEFAULT} 如果var没有声明,则以$DEFAULT作为其值
${var:=DEFAULT} 如果var没有声明或者为空值,则以$DEFAULT作为其值
${var+OTHER} 如果var声明,则其值为$OTHER,否则为null字符串
${var:+OTHER} 如果var被设置值,则其值为$OTHER, 否则为null字符串
${var?ERR_MSG} 如果var没被声明,则打印$ERR_MSG
${var:?ERR_MSG} 如果var没被设置,那么就打印$ERR_MSG
${!varprefix*} 匹配之前所有以varprefix开头进行声明的变量
${!varprefix@} 匹配之前所有以varprefix开头进行声明的变量

举例:

(1)

  1. #! /bin/bash
  2. echo ${a-3}
  3. a=2
  4. echo ${a-3}
  5. a=
  6. echo ${a-3}

输出(如果var没有声明,则以$DEFAULT作为其值):

  1. 3
  2. 2
  3. (空)

(2)

  1. #! /bin/bash
  2. echo ${b:-4}
  3. b=
  4. echo ${b:-4}
  5. b=5
  6. echo ${b:-4}
输出(如果var没有声明或者为空值,则以$DEFAULT作为其值):
  1. 4
  2. 4
  3. 5
(3)
  1. #! /bin/bash
  2. echo ${c=6}
  3. c=
  4. echo ${c=6}
  5. c=7
  6. echo ${c=6}
输出(如果var没有声明,则以$DEFAULT作为其值):
  1. 6
  2. 7

(4)

  1. #! /bin/bash
  2. echo ${d:=8}
  3. d=
  4. echo ${d:=8}
  5. d=9
  6. echo ${d:=8}
输出(如果var没有声明或者为空值,则以$DEFAULT作为其值):
  1. 8
  2. 8
  3. 9

(5)

  1. #! /bin/bash
  2. echo ${e+9}
  3. e=
  4. echo ${e+9}
  5. e=10
  6. echo ${e+9}
输出(如果var声明,则其值为$OTHER,否则为null字符串):
  1. 9
  2. 9

(6)

  1. #! /bin/bash
  2. echo ${f:+11}
  3. f=
  4. echo ${f:+11}
  5. f=12
  6. echo ${f:+11}
输出(如果var被设置值,则其值为$OTHER, 否则为null字符串):

  1. 11
2. 字符串操作

(1)${#string}:变量string的长度

(2)${string:position}:从变量string获取由下标position开始的子串

(3)${string:position:length}:从变量string中获取由position下标开始长度为length的子串

  1. xiaosi@Qunar:~/company/sh$ str=yoona
  2. xiaosi@Qunar:~/company/sh$ echo ${#str}
  3. 5
  4. xiaosi@Qunar:~/company/sh$ echo ${str:3}
  5. na
  6. xiaosi@Qunar:~/company/sh$ echo ${str:1:3}
  7. oon

(4)${string/substring/replacement}使用$replacement, 来代替第一个匹配的$substring

(5)${string//substring/replacement}:使用$replacement, 代替所有匹配的$substring    

  1. xiaosi@Qunar:~$ str=jifeng.si
  2. xiaosi@Qunar:~$ echo ${str/./+}
  3. jifeng+si
  4. xiaosi@Qunar:~$ str=jifeng.si.si
  5. xiaosi@Qunar:~$ echo ${str/./+}
  6. jifeng+si.si
  7. xiaosi@Qunar:~$ echo ${str//./+}
  8. jifeng+si+si

(6)${string/#substring/replacement}:如果$string的前缀匹配$substring, 那么就用$replacement来代替匹配到的$substring    

  1. xiaosi@Qunar:~/company/sh$ str=yoona
  2. xiaosi@Qunar:~/company/sh$ echo ${str/#oo/xx}
  3. yoona
  4. xiaosi@Qunar:~/company/sh$ echo ${str/#yo/oy}
  5. oyona
(7)${string/%substring/replacement}:如果$string的后缀匹配$substring, 那么就用$replacement来代替匹配到的$substring    
  1. xiaosi@Qunar:~/company/sh$ str=yoona
  2. xiaosi@Qunar:~/company/sh$ echo ${str/%oo/xx}
  3. yoona
  4. xiaosi@Qunar:~/company/sh$ echo ${str/%na/an}
  5. yooan
  6. xiaosi@Qunar:~/company/sh$ echo ${str/oo/xx}
  7. yxxna
(8)${string#substring}:从变量$string的开头(从开头匹配),删除最短匹配$substring的子串    

(9)${string##substring}:从变量$string的开头(从开头匹配),删除最长匹配$substring的子串    

  1. xiaosi@Qunar:~/company/sh$ str=yoona.sunny.ok
  2. xiaosi@Qunar:~/company/sh$ echo ${str#*.}
  3. sunny.ok
  4. xiaosi@Qunar:~/company/sh$ echo ${str##*.}
  5. ok
  6. xiaosi@Qunar:~/company/sh$ echo ${str#yoo}
  7. na.sunny.ok
  8. xiaosi@Qunar:~/company/sh$ echo ${str#y}
  9. oona.sunny.ok
  10. xiaosi@Qunar:~/company/sh$ echo ${str#sunny}
  11. yoona.sunny.ok
(10)${string%substring}:从变量$string的结尾(从末尾匹配),删除最短匹配$substring的子串    

(11)${string%%substring}:从变量$string的结尾(从末尾匹配),删除最长匹配$substring的子串

  1. xiaosi@Qunar:~/company/sh$ str=yoona.sunny.ok
  2. xiaosi@Qunar:~/company/sh$ echo ${str%.*}
  3. yoona.sunny
  4. xiaosi@Qunar:~/company/sh$ echo ${str%%.*}
  5. yoona
  6. xiaosi@Qunar:~/company/sh$ echo ${str%ok}
  7. yoona.sunny.
  8. xiaosi@Qunar:~/company/sh$ echo ${str%k}
  9. yoona.sunny.o
  10. xiaosi@Qunar:~/company/sh$ echo ${str%sunny}
  11. yoona.sunny.ok


版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

Linux Shell 学习笔记(六)---注释/字符串/数组

注释 以“#”开头的行就是注释,会被解释器忽略。 sh里没有多行注释,只能每一行加一个#号。 如果在开发过程中,遇到大段的代码需要临时注释起来,过一会儿又取消注释,怎么办呢? 每一行加个#符号太...

【鸟哥的linux私房菜-学习笔记】Bash shell的变量功能及操作环境

shell只要能够操作应用程序的接口都能够称为shell用户->shell->核心->硬件查看系统下有哪些可用的shell:/etc/shells (linux下常用的是bash)用户登陆时,系统会...

MongoDB 学习笔记(一):安装及简单shell操作

一、说明 1、该系列MongoDB学习笔记的学习环境采用的MongoDB版本为mongodb-win32-i386-2.4.6,操作系统为win7。 二、安装 1、新建两个目录,分别是D:\Insta...
  • cdu09
  • cdu09
  • 2013-10-07 18:29
  • 1388

树莓派学习笔记——Shell脚本操作GPIO

树莓树莓派可以无痛入门linux,下面通过命令和shell脚本控制树莓派GPIO。通过本文可以熟悉多个linux命令,并熟悉shell脚本编写方法,并对IO重定向有一个基本的体会。我在学习树莓派的过程...

hadoop学习笔记1.使用shell和JAVA API操作HDFS

我们接着上一节来,上次我们已经把伪分布式环境搭建好了。 OK,我们先来测试一下 ,跑跑自带的例子wordcount 1.运行wordcount测试MapReduce admi...

Linux Shell 学习笔记3:环境变量的操作及相关命令

通常情况下,每一个进程都有自己的运行环境,这个环境一般是由一组变量组成的,这些变量中存有进程可能需要引用的信息。Shell也有自己的环境变量。每次当一个shell启动时,它都将创建适合于自己环境变量的...

Shell脚本学习笔记(十)--文件操作

文件操作取得目录内容lsgetconf ARG_MAX  判断文件是否存在建立文件建立一般文件:建立文件1 使用转向输出:> text.txt2 配合空命令: :> test.xtx   可以增加sc...

Linux Shell 学习笔记 ---- 文件操作

声明:以下内容绝大部分作为笔记摘自《Linux Shell 脚本攻略》(Sarath Lakshman 著,门佳译)一书,特此声明并致谢! 1. 创建长路径目录     mkdir -p /hom...

HBase学习笔记——基本操作:shell和java API

进入HBase shell的命令:./hbase shellHBase的基本操作如下表所示 一、创建表1、shell操作相关shell操作如下所示: 显示HBase中的所有表 创建表(指定命名空间、...

Hadoop学习笔记(五)---HDFS shell操作

1.查看hadoop上根目录的文件:[root@localhost current]# hadoop fs -ls /2.上传文件到hadoop:[root@localhost hadoop]# vi...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)