Chinaunix首页 | 论坛 | 博客
  • 博客访问: 302564
  • 博文数量: 84
  • 博客积分: 10
  • 博客等级: 民兵
  • 技术积分: 890
  • 用 户 组: 普通用户
  • 注册时间: 2011-03-13 16:46
文章分类

全部博文(84)

文章存档

2017年(2)

2016年(4)

2015年(78)

我的朋友

分类: LINUX

2015-06-09 22:58:36

bash 对${}定义了不少用法。对变量的操作及判断是一个十分有用的工具,应好好学习一下,以下是说明的表列
变量的删除
${parameter#word} 

${parameter##word}
${parameter%word} 
${parameter%%word}
变量的提取
${parameter:offset} 

${parameter:offset:length}

变量的替换
${parameter/pattern/string}

${parameter//pattern/string}

变量的删除、提取、替换
  1. [root@awake ~]# file=/dir1/dir2/dir3/my.file.txt  //定义一个变量
  2. [root@awake ~]# echo $file                        //显示定义的变量
  3. /dir1/dir2/dir3/my.file.txt
  4. [root@awake ~]# echo ${file#*/}                   //删除/和/左边的字符串,最短匹配的
  5. dir1/dir2/dir3/my.file.txt
  6. [root@awake ~]# echo ${file##*/}                  //删除/和/左边的字符串,最长匹配的
  7. my.file.txt
  8. [root@awake ~]# echo ${file%/*}                   //删除/和右边的字符串,最短匹配
  9. /dir1/dir2/dir3
  10. [root@awake ~]# echo ${file%%/*}                  //删除/和右边的字符串,最长匹配,全部删除完了,因此为空置

  11. [root@awake ~]# echo ${file:5}
  12. /dir2/dir3/my.file.txt                            //提取                  这个不知如何解释,没查到
  13. [root@awake ~]# echo ${file:0:5}                  //提取第5个字节左边的5个 这个不知如何解释,没查到
  14. /dir1
  15. [root@awake ~]# echo ${file:5:6}                  //提取第5个字节的右边6个字节
  16. /dir2/
  17. [root@awake ~]# echo ${file/dir/path}             //用path替换最左边的dir,其中/应该是参考符,如果没有/的变量内容应该如何替换?
  18. /path1/dir2/dir3/my.file.txt
  19. [root@awake ~]# echo ${file//dir/path}            //用path替换全部的dir
  20. /path1/path2/path3/my.file.txt
  21. [root@awake ~]#



利用 ${ } 还可针对不同的变数状态(没设定、空值、非空值)赋值:
${parameter-word}
${parameter:-word}
${parameter:=word}
${parameter:?word} 当parameter指示的参数没有被设值的时候,将会通过标准错误的方式显示word中的语句。
${parameter:+word}
${!prefix*} 
${#parameter}
${#var} 可计算出变量值的长度:

${#file} 可得到 27 ,因为/dir1/dir2/dir3/my.file.txt 是27个字节



如果old变量为未设定或叫不存在,那么将new=content
  1. [root@awake ~]# unset new old
  2. [root@awake ~]# echo ${old-content} 
  3. content
  4. [root@awake ~]# new=${old-content}
  5. [root@awake ~]# echo new=$new,old=$old
  6. new=content,old=
如果old变量为空字符串,那么将new=空
  1. [root@awake ~]# unset old new
  2. [root@awake ~]# old=""
  3. [root@awake ~]# new=${old-content}
  4. [root@awake ~]# echo new=$new,old=$old
  5. new=,old=
  6. [root@awake ~]#
如果old变量为非空字符串,那么new=$old
[root@awake ~]# unset old new
  1. [root@awake ~]# old=old
  2. [root@awake ~]# new=${old-content}
  3. [root@awake ~]# echo new=$new,old=$old
  4. new=old,old=old
  5. [root@awake ~]#
总结及其他字符整理
变量设置方式 old没有设置 old为空字符串 old已设置为非空字符串
new=${old-content} new=content new= new=$old
new=${old:-content} new=content new=content new=$old
new=${old+content} new= new=content new=content
new=${old:+content} new= new= new=content
new=${old=content} old=content
new=content
old不变
new=
old不变
new=$old
new=${old:=}
old=content
new=content
old=content
new=content
old不变
new=$old
new=${old?content}
content输出至stderr new= var=$str
new=${old:?content}
content输出至stderr content输出至stderr var=$str







阅读(789) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~