http://blog.chinaunix.net/uid-27040051-id-3450991.html  

  高级变量

  基本形式

  [1].变量扩展 格式 ${变量名称}

  [2].命令扩展 格式 $(命令)

  [3].算术扩展 格式 $((算术式))

  1.变量扩展

  基本形式:${变量名称}

  变量扩展含义:一种简易的条件判断,对不同的条件赋予变量不同的值替换.它和变量存在与否的关系很大.

  1.1 测试变量是否存在的基本用法

  语法: ${待测变量-默认值}

  说明:若待测变量不存在则符合判断条件,以传回默认值作为处置.

  解析:若待测变量不存在则返回默认值,否则返回变量的值

  实例:

  unset a

  echo ${a-'默认'} #输出为'默认'

  1.2 测试变量不存在或其值为空时传回一个默认值

  语法:${待测变量:-默认值}

  实例:

  a=

  echo ${a:-'默认'} #输出为'默认'

  1.3 测试变量不存在或其值为空给变量赋予一个默认值

  语法:${待测变量:=默认值}

  实例:

  a=

  echo ${a:='默认'}

  echo $a #输出为2行'默认'

  1.4 测试变量不存在或其值为空,输出一个提示信息

  语法:${待测变量:?提示信息}

  实例:

  a=

  echo r={a:?提示信息} #输出"提示信息"

  1.5 测试变量存在且为非空则返回真值

  语法:${待测变量:+真值}

  实例:

  a=hello

  echo ${a:+world} #输出为"world"

  总结:

  符号 作用

  : 判断变量是否为空,若为空则为真

  + 正向,判断变量是否存在且不为空,若存在且不为空则为真

  - 反向,判断变量是否不存在,若不存在则为空

  = 赋值,

  ? 提示信息

  2.取字符串切片,获得字符串长度

  2.1 取字符串切片

  语法:

  [1].${变量:开始的位置索引}

  作用:截取从指定的位置开始到字符串结束的所有字符,开始字符的索引为0

  实例:

  str="hello world"

  echo ${str:6} #输出结果为"world"

  [2].${变量:起始位置:长度}

  作用:截取从指定的起始位置开始的指定长度的字符串。

  实例:

  str="hello world"

  echo ${str:6:2} #输出为"wo"

  2.2 计算字符串长度

  语法:${#变量名称}

  实例:

  str="hello world"

  echo ${#str} #输出结果为11

  3.对比样式

  目的:截取变量值(字符串)的某一个部分

  做法:将符合样式的部分字符串删除或替换

  3.1 由字符串前面开始对比删除最短的相符者

  语法:${待测变量#样式}

  说明:从待测变量的值的左边开始对比,删除最短符合样式的字符串

  实例:

  filename="/usr/sbin/ntpdate"

  echo ${filename#/*/} #显示结果sbin/ntpdate

  3.2 由字符串前面开始对比删除最长的相符者

  语法:${待测变量##样式}

  实例:

  filename="/usr/sbin/ntpdate"

  echo ${filename##/*/} #显示结果ntpdate

  3.3 由字符串后面开始对比删除最短的相符者

  语法:${待测变量%样式}

  实例:

  filename="/usr/sbin/ntpdate"

  echo ${filename%/*} #输出结果/usr/sbin

  3.4 由字符串后面开始对比删除最长的相符者

  语法:${待测变量%%样式}

  实例:

  filename="hello/usr/sbin/ntpdate"

  echo ${filename%%/*} #输出结果hello

  4.替换或删除部分字符串

  4.1 只替换找到的第一个字符串

  语法:${待测变量/样式/替换}

  实例:

  str="hello hello"

  echo ${str/hello/world} #结果为world hello

  4.2 替换找到的所有样式字符串

  语法:${待测变量//样式/替换}

  实例:

  str="hello hello"

  echo ${str/hello/world} #结果为world world

  4.3 删除第一个指定的字符串

  语法:${待测变量/要删除的字符串/}

  实例:

  str="hello hello"

  echo ${str/hello/} #结果为hello

  4.4 删除所有指定的字符串

  语法:${待测变量//要删除的变量/}

  实例:

  str="hello world hello"

  echo ${str//hello/} #输出结果为world

  5.命令扩展

  语法:$(命令)

  实例: time=$(date) 等价 time=`date`

  6.算术扩展

  语法:$((算术))

  实例:

  echo "a=$((5*5))" #结果为a=25

 

Linux高级变量的更多相关文章

  1. Linux Shell 高级变量及字符串

    高级变量包含三个部分1.变量扩展2.命令替换3.算术扩展在Bash Shell中,$算符会触发到上述三种扩展,基本形式如下:    基本型             扩展种类            例子 ...

  2. Linux shell 变量 数学 运算

    Abstract : 1)  Linux shell 中使用 let , [ ] ,(( )) 三种运算符操作 shell 变量进行简单的基本运算: 2)Linux shell 中使用 expr 与 ...

  3. linux高级编程基础系列:线程间通信

    linux高级编程基础系列:线程间通信 转载:原文地址http://blog.163.com/jimking_2010/blog/static/1716015352013102510748824/ 线 ...

  4. Linux高级知识

    Linux高级知识 十一.LAMP架构 1.LAMP架构介绍.MySQL.MariaDB介绍.MySQL安装 2.MariaDB和Apache安装 3.安装PHP5和PHP7 4.Apache和PHP ...

  5. Linux高级命令进阶(week1_day2)

    Linux高级命令进阶(week1_day2)--技术流ken   输出重定向   场景:一般命令的输出都会显示在终端中,有些时候需要将一些命令的执行结果想要保存到文件中进行后续的分析/统计,则这时候 ...

  6. Linux 环境变量 设置 etc profile

    一.Linux的变量种类 按变量的生存周期来划分,Linux变量可分为两类: 1.永久的:需要修改配置文件,变量永久生效. 2.临时的:使用export命令声明即可,变量在关闭shell时失效. 二. ...

  7. linux 环境变量设置及查看

    1. 显示环境变量HOME $ echo $HOME /home/redbooks 2. 设置一个新的环境变量hello $ export HELLO="Hello!" $ ech ...

  8. 三种配置linux环境变量的方法(以java为例)

    1.先确认是否为openjdk:参考 2. 修改/etc/profile文件  如果你的计算机仅仅作为开发使用时推荐使用这种方法,因为所有用户的shell都有权使用这些环境变量,可能会给系统带来安全性 ...

  9. Linux环境变量的修改(永久,暂时)以及修改ls显示的时间格式

    本文转自:http://blog.sina.com.cn/s/blog_8e21864f01014u9h.html Linux修改环境变量,很简单但很重要 一.Linux的变量种类 按变量的生存周期来 ...

随机推荐

  1. Uva 11538 - Chess Queen

    http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&p ...

  2. SVN空格问题的解决方法

    (注意:如果你的路径里有空格记得要在binpath的头尾用转义字符/"把整个个binpath框起来,D:\SVN\svnroot指svn资源库根目录) displayname指服务名称 de ...

  3. 认真学习shell的第一天-数学运算

    shell中的数学运算有三种方式: (1)let,用let的时候,变量名称前不用添加$ (2)[],[]中变量可使用也可不使用$ (3)(())变量名之前必须添加$

  4. org.openqa.selenium.WebDriverException: f.QueryInterface is not a function Command duration or timeout:

    今天偶遇一个问题,运行项目时,发现这个问题: org.openqa.selenium.WebDriverException: f.QueryInterface is not a functionCom ...

  5. paper 75:使用MATLAB的神经网络工具箱创建神经网络

    % 生成训练样本集 clear all; clc; P=[110 0.807 240 0.2 15 1 18 2 1.5; 110 2.865 240 0.1 15 2 12 1 2; 110 2.5 ...

  6. 09---Net基础加强

    复习 Person类: using System; using System.Collections.Generic; using System.Linq; using System.Text; us ...

  7. 【crunch bang】 增加“菜单项”

    [右键菜单]->[Settings]->[Openbox]->[GUI Menu Editor] 挑选合适的位置,增加[菜单项],编辑内容.

  8. iBatis叙述

    1.添加Mybatis的配置文件conf.xml 在src目录下创建一个conf.xml文件,如下图所示: 2.定义表所对应的实体类 3.定义操作users表的sql映射文件userMapper.xm ...

  9. Java笔试题解答和部分面试题

    面试类  银行类的问题 问题一:在多线程环境中使用HashMap会有什么问题?在什么情况下使用get()方法会产生无限循环? HashMap本身没有什么问题,有没有问题取决于你是如何使用它的.比如,你 ...

  10. AMD机制与cMD的区别和概念简要介绍

    1.http://www.cnblogs.com/dojo-lzz/p/4707725.html 2.http://blog.chinaunix.net/uid-26672038-id-4112229 ...