变量操作总结:

${Var:-Value}        变量Var 为unset 或 null  则输出Value。 有值则输出变量Var的值。

${Var:=Value}        变量Var 为unset 或 null  则输出Value,并且赋值于变量Var。 同上。

${Var:+Value}        变量Var 为unset 或 null  则输出变量Var。 有值则输出Value.

${Var:?Value}        变量Var 为unset 或 null  则输出错误信息Value。有值则输出变量Var的值。

${Var-Value}        变量Var 为 unset 则输出Value。 有值或为空,则输出变量Var的值。

${Var=Value}        变量Var 为 unset 则输出Value,并且赋值于变量Var。        同上。

${Var+Value}        变量Var 为 unset 则输出变量Var。有值或为空,则输出Value

${Var?Value}        变量Var 为 unset 则输出错误信息Value。 有值或为空, 则输出变量Var。

在这种的操作中,只有三种情况:1. 变量有值, 2. 变量没有值,  3. 没有变量

在上面加:的操作符中, 空不代表值,    在没有:号的操作符中,空也代表为值。

${变量}      一般变量引用。  {} 一般情况可省略。

${#变量}     取变量中字符的个数(长度)。

bash脚本就是由bash提供的,变量当然也是bash提供的了。

所以bash的glob通配符也可以在大部分里使用。

一、 变量值的编辑:

1. 变量字符匹配则不输出。   2. 变量内容字符偏移并截出余下的部分字符。

3. 变量字符的替换。

1.  所匹配到的变量内容将不显示。

操作符:#                 ${变量#匹配字符}$ do="Hello World"

$ echo $do

Hello World

$ echo ${do#He}

llo World                    #He没有显示

$ echo ${do#*l}

lo World                     #从左到右匹配

#号在上面那种变量应用中,把左边变量的值,按右边的字符串从左到右最短区配,

所区配到的字符不输出。 支持通配符,如?。

操作符: ##$ echo ${do##*l}

d                        #变量的值是Hello World, 从左边一直匹配到倒数第二个字符l.

##号,这个则就是最长区配了。   记住是从左到右的区配顺序。

操作符:%           ${变量%匹配字符}$ echo $do

Hello World

$ echo ${do%ld}

Hello Wor

$ echo ${do%o*}

Hello W

%号跟上面#号的形式都一样,只不过是从右到左的匹配。 同样的一个%号是 最短区配

操作符:%%$ echo ${do%%o*}

Hell

%%号,两个%号,最长区配。  通配符都是支持的。 毕竟都是在shell下,经由shell解释输出。

2.  上面的 # % 都是用来定义匹配变量内容的操作。而下面是用来定义固定的字符的操作。

${变量:数字}$ echo $do

Hello World

$ echo ${do:3}

lo World                    #变量内容的前三个字符没有显示。

前面的3个字符没有输出, 专业点叫作 偏移 , 向右偏移了3个字符。

$ echo ${do:3:2}

lo

$ echo ${do:3:5}

lo Wo

在上面偏移的基础上,再显示向后截取的几位字符。 空格可也是字符啊。

3.  替换变量内容。

${变量/匹配字符/替换字符}$ echo ${do/l/L}

HeLlo World

把第一个匹配到的字符,也就是l , 替换成大写L .

这里是只替换了第一个匹配到的字符。如果把变量后面的/变成两个,就变成替换所有了。

${变量//匹配字符/替换字符}$ echo ${do//l/L}

HeLLo WorLd

替换了所有的l,这里也是可以用通配符的, 但是这里没有最长最短匹配之说,只有替换1个还是替换所有的字符。至于效果,亲们可以自己试试。

二、 变量....., 不知道叫什么名了。

在这种的操作中,只有三种情况:1. 变量有值, 2. 变量没有值,  3. 没有变量

注意: 一般情况下,变量为空也是一种值。 除非有特殊的操作。

do=              do变量有值了。

declare  var     生成了var变量,但var变量没有值。

1.  ${变量-值}

里面的是减号。  那个值当然也可以用变量,不过要加上$,相当于变量引用。-号的左边和右边完全是不同的两个部分。

$ echo $do

Hello World

$ echo ${do-kaka}              #在do有值的情况下,输出do的值。

Hello World

$ unset do                     #删除变量do

$ echo ${do-kaka}              #在没有do变量的情况下,也就是没有值。则输出后面的值。

kaka

$ do=                          #在do为空的情况下。

$ echo ${do-kaka}              #在do有值的情况下,输出do的值,do是空值。

#所以输出空。

这个的别一种方式一般在判断默认值的时候用。如: do=${do:-kaka}

2.  ${变量=值}   里面是等号。$ echo $do

Hello World

$ echo ${do=kaka}                #在do有值的情况下,输出do的值。

Hello World

$ unset do

$ echo ${do=kaka}                #在没有do变量的情况下,或没有值。输出后面的值

kaka

$ echo $do

kaka                             #并且把kaka赋给变量do。

比 - 多了一项功能,只要在变量,就会把kaka赋给do。

3.  ${变量+值}   里面是加号。$ echo $do

Hello World

$ echo ${do+kaka}              #do有值的情况下,输出kaka

kaka

$ unset do

$ echo ${do+kaka}              #在没有do这个变量的情况下或者没有值。那就没有吧。

$ do=

$ echo ${do+kaka}              #空值,输出kaka

kaka

看样子正好与 - 相反, 这个是变量有值则用后面的值,而 - 号是没值则用后面的值。

4.  ${变量?值}$ echo $do

Hello World

$ echo ${do?kaka}

Hello World

$ unset do

$ echo ${do?kaka}              # 看到了没,在没有do这个变量的情况下或者没有值。

# 提示错误信息是 kaka

bash: do: kaka

$ do=

$ echo ${do?kaka}

除了没有值的情况下会报错,并且报错信息是kaka外,就没有别的了。

下面还是关于 - = + ? 的,不过变成了 :-  :=  :+  :?   。

不一样之处就是把空值给抹去了,从此以后空就真的空了, 空不再代表值而存在,

而是跟unset一样。

这里说明一下, 以shell来说。其实unset就是把变量的内存空间的地址给撤销了,

而变量空值,就是有变量的内存空间地址,不过内存空间里面没有数据。

1.  ${变量:-值}$ echo $do

Hello World

$ echo ${do:-kaka}

Hello World

$ unset do

$ echo ${do:-kaka}               #没有do变量,同样的相当于没有值。 输出kaka

kaka

$ do=

$ echo ${do:-kaka}                #空不再代表值, 在do没有值的情况下

#输出kaka

kaka

怎么样,区别只有一点, 空不再代表值了。

2. ${变量:=值}$ echo $do

Hello World

$ echo ${do:=kaka}

Hello World

$ echo $do

Hello World

$ unset do

$ echo ${do:=kaka}

kaka

$ echo $do

kaka

$ do=

$ echo ${do:=kaka}                  #空不再代表值,所以输出kaka

kaka

$ echo $do

kaka

还是那个意思,kaka输出,并且赋值给了do。    空不再代表值了。

3. ${变量:+值}$ echo $do

Hello World

$ echo ${do:+kaka}                #在do有值的情况下,输出kaka

kaka

$ unset do

$ echo ${do:+kaka}                #在do不存在的时候,也就是没有值。 输出do的值,

#而do的值当然是不存在的,输出空白行。

$ do=

$ echo ${do:+kaka}                #do为空,空不再代表值。 没有值就不会输出后面的值。

#同样的空白行。

+ 号是有值才会用后面的那个值的。 跟-号正好相反。

4. ${变量:?值}$ echo $do

Hello World

$ echo ${do:?kaka}

Hello World

$ unset do

$ echo ${do:?kaka}                   #没有do变量,当然没有值,报kaka错误。

bash: do: kaka

$ do=

$ echo ${do:?kaka}                   #do为空,代表没有值。 报kaka错误。

bash: do: kaka

这个跟-号也差不多了, 只不过还里是输出的错误信息。

good boy, nice girl.

linux变量最大长度,51CTO博客-专业IT技术博客创作平台-技术成就梦想相关推荐

  1. linux httpd 域名映射,51CTO博客-专业IT技术博客创作平台-技术成就梦想

    一.DNS服务器的设置 我们知道互联网网是基于TCP/IP协议的,要进行通信必须获得对方的IP地址,这是通过DNS服务器来实现的.因此要想实现虚拟域名首先应当令DNS 服务器接受该虚拟域名,即把它映射 ...

  2. linux实时备份,51CTO博客-专业IT技术博客创作平台-技术成就梦想

    rsync缺点/不足: 1.rsync在同步数据时,需要扫描所有文件后进行比对,进行差量传输.如果文件数量达到了百万甚至千万量级,扫描所有文件将是非常耗时的,并且正在发生变化的往往是其中很少的一部分, ...

  3. linux使用grep数字个数,51CTO博客-专业IT技术博客创作平台-技术成就梦想

    一.作业(练习)内容: 1.总结本此课程中所涉及命令的使用方法及相关示例展示: Linux文本处理三剑客: grep: 文本过滤工具: sed:文本编辑器(行):stream editor awk:文 ...

  4. linux 等待信号,51CTO博客-专业IT技术博客创作平台-技术成就梦想

    错误现象:(semop函数调用,strerror(errno)输出结果) Interrupted system call 平台:RedHat Linux LINUX文档关于EINTR的描述是这样子的: ...

  5. linux定时刷新命令结果,51CTO博客-专业IT技术博客创作平台-技术成就梦想

    基本指令等: 部分快捷键: ctrl+c 强制结束当前运行程序,终止命令 ctrl+d 结束当前运行程序 先按ESC然后按. 或者同时按住ALT和. 则输入上一条命令的最后一个参数,与!$相同 Ctr ...

  6. linux匹配数字正则,51CTO博客-专业IT技术博客创作平台-技术成就梦想

    正则表达式可以用来处理大量的文件和字符串,运维工作中过滤日记简单高效,Linux最常应用正则表达式的命令有grep(egrep).sed.awk. 正则表达式和文本通配符不同容易混淆. 字符匹配 . ...

  7. linux基础知识全面总结,51CTO博客-专业IT技术博客创作平台-技术成就梦想

    根据RH033课程整理而成. 12月19号 Lecture 10 进程:活体,程序的副本 定义:进程是进程实体的运行过程,是系统进行资源分配和调度的基本单位.--<计算机操作系统> 进程的 ...

  8. linux续行符号,51CTO博客-专业IT技术博客创作平台-技术成就梦想

    常见的操作系统: centos:企业 Linux-----Community Enterprise Operating System----开源免费 Redhat enterprise Linux(R ...

  9. linux vbox 不能使用scsi_id 查看uuid,51CTO博客-专业IT技术博客创作平台-技术成就梦想...

    今天在搭建RAC的时候,使用udev方式来创建ASM磁盘,执行/sbin/scsi_id命令不知道啥原因,死活获取不到UUID,执行结果啥也不显示. [root@seiang2 ~]# scsi_id ...

最新文章

  1. mycat是什么_MYCAT学习2
  2. ActiveXObject函数详解
  3. Java--基础总结
  4. JPA 2.1: What is new
  5. Linux Shell脚本编程--cut命令
  6. 为了使界面组件更圆滑,Swing,且跨系统
  7. AngularJS 无限滚动加载数据控件 ngInfiniteScroll
  8. 1047. Student List for Course (25)
  9. 如何做好一个开源项目(一)
  10. 【OpenCV 例程200篇】91. 高斯噪声、瑞利噪声、爱尔兰噪声
  11. Team Foundation Server 2010 安装、部署与配置(三):安装 .
  12. 飞龙的计算机公开课推荐
  13. babel-polyfill解决vue框架项目IE无法打开问题
  14. Java构造方法以及构造方法的重载
  15. 刷脸时代来临,深度解析人脸识别技术市场
  16. 电信、网通南北网络互通互联解决方案
  17. IT培训机构出来的学生之我见闻
  18. 如何使用Python编写简单的游戏?
  19. 什么是pinterest
  20. ppt快捷键及金字塔原理

热门文章

  1. Visual C++ 时尚编程百例016(字体)
  2. 36岁自学C语言,C语言的数据类型
  3. python可变类型和不可变深浅拷贝类型_python3笔记十四:python可变与不可变数据类型+深浅拷贝...
  4. 闪屏页面(Splash)开发
  5. mysql查询_MYSQL查询
  6. python编的游戏越玩越卡_用Python写游戏,不到十分钟就学会了
  7. [转载] java 枚举Enum源码解析
  8. android so abi适配,Android NDK学习(六): so文件兼容之abiFilters的使用
  9. 程序员出差是去干什么_让我来告诉你,35岁以上的人都在干什么!
  10. 16位的数字高字节和低字节_显示掩盖较低和较高的16位数字半字节| 8086微处理器...