变量(续)

  1. 本篇主要通过例子陈述两个方面的问题①通过模式处理变量字符串②变量定义的几种特殊形式
  2. 通过模式处理变量字符串

首先设实验变量为lqx,暂时初值为liuliancao

[[email protected] ~]# lqx="liuliancao"
[[email protected] ~]# echo $lqx

liuliancao

eg1.1  位置裁剪${variable:first:length(default to end)}

指定位置裁剪,一直到结尾

[[email protected] ~]# echo ${lqx:3}
liancao
[[email protected] ~]# echo ${lqx:2}
uliancao

指定位置裁剪,裁剪几个字符,如果想要第2-4字符的话,其中1表示从第二个字符开始,默认从0,3表示3个字符

[[email protected] ~]# echo ${lqx:1:3}
iul

eg1.2模式裁剪${variable#word} 注意中间没有空格

从字符串开头,开始模式匹配,匹配到的都会被裁剪,留下剩下的,用#表示非贪婪模式(最短模式),通常可以和*使用表示任意字符串

[[email protected] ~]# echo ${lqx#liu}
liancao
[[email protected] ~]# echo ${lqx#*i}
uliancao

贪婪模式,直觉性地想,写两个#,学过正则的估计知道,贪婪模式,是最大程度匹配

[[email protected] ~]# echo ${lqx##*i}

ancao

从尾部,我们使用%,贪婪模式double,这里提醒下,当我们%的时候,怎么写模式呢,从正面写哦,所以写的是a*而不是*a.这句话请仔细体会,并尝试。

从后往前找,尽可能离后面的位置最远的符合模式的全部截掉

[[email protected] ~]# echo ${lqx%%a*}

liuli

从后往前找,第一个即可

[[email protected] ~]# echo ${lqx%a*}
liulianc

再举个例子,也为了等会的脚本服务

[[email protected] ~]# tel="0518-777-123-234"

取区号,从前面取的话,必然不行,前面的正是我们需要的,所以从后面取,一直取到最远的连字符

所以

[[email protected] ~]# echo ${tel%%-*}
0518

那么取得后面的号码呢,非贪婪模式,到-结束,对吧

[[email protected] ~]# echo ${tel#*-}
777-123-234

下面写一个根据URL获取域名的一个脚本程序,主要是是否使用贪婪模式,一定要想清楚

分析下思路

一个URL通常由下面的基本格式组成

protocol://host:port/path/index.php?id=1(action)

分析下,必须从后面截取,因为目录也会用到/,而前面的内容是相对的

①先非贪婪截断前面的第一个//然后再从后面截取最后一个看到的/(也即贪婪),然后如果有冒号从后面截取:(非贪婪贪婪无所谓)

[[email protected] shell]# cat url.sh
#!/bin/bash
#asume that $1 is the URL,and i will find the host
_url=$1
echo "orignal url: $_url"
#1 reduce protocol
_url=${_url#*://}
echo " url without protocol: $_url"
#2 reduce behind
_url=${_url%%/*}
echo " url without pro and path: $_url"
#3 reduce port
_url=${_url%:*}
echo " final host: $_url"

运行结果为

[[email protected] shell]# ./url.sh  http://www.liuliancao.com:8080/index.php?id=1

orignal url: http://www.liuliancao.com:8080/index.php?id=1

url without protocol: www.liuliancao.com:8080/index.php?id=1

url without pro and path: www.liuliancao.com:8080

final host: www.liuliancao.com

  1. 变量定义的几种特殊形式

<td vAlign="middle" style="padding-top: 5px; padding-left: 4px; padding-botto


形式


说明


${var}


变量本来的值


${var:-word}


如果变量 var 为空或已被删除(unset),那么返回word,但不改变var 的值。


${var:=word}


如果变量 var 为空或已被删除(unset),那么返回 word,并将 var 的值设置为 word。


${var:?message}

时间: 2024-10-11 10:12:44

变量(续)的相关文章

JAVA-初步认识-第二章-变量续

一. 前言 先理清一下学习的脉络,在第二章JAVA语言基础的学习中,先是介绍了基础知识有哪几类,然后逐一介绍下来.从关键字,标识符,常量,变量,这样介绍开来.这里插一句,之前的分析不准确,源代码不是由关键字,标识符构成,而是分类的标准有很多.从不同的角度来切入的话,会有不一样的结果.如果从第二章的知识点脉络来看,源程序由这么几部分组成,关键字,标识符,常量和变量,函数,数组....但是如果从最初的角度来看源代码的话,就是由两部分组成的,指令和数据.从不同的切入点,对源程序进行划分,实际上这两个切

C++ 11 左值,右值,左值引用,右值引用,std::move, std::foward

这篇文章要介绍的内容和标题一致,关于C++ 11中的这几个特性网上介绍的文章很多,看了一些之后想把几个比较关键的点总结记录一下,文章比较长.给出了很多代码示例,都是编译运行测试过的,希望能用这些帮助理解C++ 11中这些比较重要的特性. 关于左值和右值的定义 左值和右值在C中就存在,不过存在感不高,在C++尤其是C++11中这两个概念比较重要,左值就是有名字的变量(对象),可以被赋值,可以在多条语句中使用,而右值呢,就是临时变量(对象),没有名字,只能在一条语句中出现,不能被赋值. 在 C++1

前端面试合集

VUE 1.什么是 vue 生命周期 2.vue生命周期的作用是什么 3.第一次页面加载会触发哪几个钩子 4.简述每个周期具体适合哪些场景 5.created和mounted的区别 6.vue获取数据在哪个周期函数 7.请详细说下你对vue生命周期的理解? vue路由面试题 mvvm 框架是什么?vue-router 是什么?它有哪些组件 active-class 是哪个组件的属性?怎么定义 vue-router 的动态路由? 怎么获取传过来的值vue-router 有哪几种导航钩子?6.$ro

bash参考手册之五(shell变量)续三

LINENO 当前在执行的脚本或者shell函数的行号. LINES 命令select用来确定打印选择列表的列宽.收到SIGWINCH后,自动设置. MACHTYPE 是一个字符串,描述了正在运行Bash的系统的类型,描述的格式符合GNU cpu-company-system 标准. MAILCHECK 确定多长时间间隔(以秒为单位),shell要去由变量MAILPATH和MAIL的值指定的文件中,检查邮件.默认值是60秒.当检查邮件的时间到了,shell在显示提示符前执行检查动作.如果这个变量

bash参考手册之五(shell变量)续二

EMACS 如果Bash在shell启动时,在环境中发现这个变量的值是 't',则会认为shell在Emacs shell缓冲区中运行,而禁止行编辑. ENV 类似于BASH_ENV,在shell以POSIX模式调用时使用.(见Bash POSIX模式) EUID 当前用户的数字形式的有效用户ID.这个变量是只读的. FCEDIT 内建命令fc带-e选项时的默认编辑器. FIGNORE 冒号分隔的后缀列表,该列表的内容在执行文件名完成时忽略.一个文件名的后缀匹配FIGNORE中的一个元素时,则该

C++ Primer 学习笔记_5_变量和基本类型(续2)

 变量和基本类型 七.枚举 枚举不但定义了整数常量集,并且还把它们聚集成组. 枚举与简单的const常量相比孰优孰劣, 通过以下一段代码. 一看便知: [cpp] view plaincopyprint? enum {input, output, append}; const int input = 0; const int output = 1; const int append = 2; enum {input, output, append}; const int input = 0;

bash參考手冊之五(shell变量)续三

LINENO 当前在运行的脚本或者shell函数的行号. LINES 命令select用来确定打印选择列表的列宽.收到SIGWINCH后,自己主动设置. MACHTYPE 是一个字符串,描写叙述了正在执行Bash的系统的类型.描写叙述的格式符合GNU cpu-company-system 标准. MAILCHECK 确定多长时间间隔(以秒为单位).shell要去由变量MAILPATH和MAIL的值指定的文件里.检查邮件. 默认值是60秒. 当检查邮件的时间到了,shell在显示提示符前运行检查动

C++ Primer 学习笔记_4_变量和基本类型(续1)

 变量和基本类型 四.const限定符 [cpp] view plaincopyprint? #include <iostream> int main() { //for循环语句存在两个问题 for (int index = 0;index != 512; ++index) { //... } return 0; } /* *1.程序的可读性:存在魔数512[魔数:他的意义在上下文中并没有体现出来,好像这个数是魔术般变出来的] *2.程序的可维护性... */ #include <i

Python学习笔记八:文件操作(续),文件编码与解码,函数,递归,函数式编程介绍,高阶函数

文件操作(续) 获得文件句柄位置,f.tell(),从0开始,按字符数计数 f.read(5),读取5个字符 返回文件句柄到某位置,f.seek(0) 文件在编辑过程中改变编码,f.detech() 获取文件编码,f.encoding() 获取文件在内存中的编号,f.fileno() 获取文件终端类型(tty.打印机等),f.isatty() 获取文件名,f.name() 判断文件句柄是否可移动(tty等不可移动),f.seekable() 判断文件是否可读,f.readable() 判断文件是