——来自《鸟哥的Linux私房菜》

——总结做方便查阅之用

变量的取用: echo

echo $variable
echo $PATH
echo ${PATH}

变量的配置守则
1.变量与变量内容以一个等号『=』来连结,如下所示:
  『myname=VBird』

2.等号两边不能直接接空格符,如下所示为错误:
  『myname = VBird』或『myname=VBird Tsai』

3.变量名称只能是英文字母与数字,但是开头字符不能是数字,如下为错误:
  『2myname=VBird』

4.变量内容若有空格符可使用双引号『"』或单引号『'』将变量内容结合起来,但
双引号内的特殊字符如 $ 等,可以保有原本的特性,如下所示:
  『var="lang is $LANG"』则可得『lang is en_US』
单引号内的特殊字符则仅为一般字符 (纯文本),如下所示:
  『var='lang is \$LANG‘』则得『lang is \$LANG』

5.可用跳脱字符『 \ 』将特殊符号(如 [Enter], $, \, 空格符, '等)变成一般字符;

6.在一串命令中,还需要藉由其他的命令提供的信息,可以使用反单引号『`命令`』或 『$(命令)』。特别注意,那个 ` 是键盘上方的数字键 1 左边那个按键,而不是单引号! 例如想要取得核心版本的配置:
  『version=\$(uname -r)』再『echo \$version』可得『2.6.18-128.el5』

7.若该变量为扩增变量内容时,则可用"\$变量"或\${变量} 累加内容,如下所示:
  『PATH="$PATH":/home/bin』

PS.我一般用\${变量},在变量拼接的时候尤其重要,name=\$nameyes,name的内容是\$nameyes 这个变量;name=\${name}yes,可以把\$name和yes拼接起来

8.若该变量需要在其他子程序运行,则需要以 export 来使变量变成环境变量:
  『export PATH』

9.通常大写字符为系统默认变量,自行配置变量可以使用小写字符,方便判断 (纯粹依照使用者兴趣与嗜好) ;

10.取消变量的方法为使用 unset :『unset 变量名称』例如取消 myname 的配置:
  『unset myname』

变量内容的删除、取代与替换

范例一:先让小写的 path 自定义变量配置的与 PATH 内容相同
  path=${PATH}
  echo $path
  /usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin

范例二:假设要将前两个目录删除掉,如何显示?

  echo ${path#/*kerberos/bin:}
  /usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin

解释:

范例三:我想要删除前面所有的目录,仅保留最后一个目录

  echo ${path##/*:}
  /root/bin

多加了一个 # 变成 ## 之后,变成『删除掉最长的那个数据』

  • # :符合取代文字的『最短的』那一个;
  • ##:符合取代文字的『最长的』那一个

如果想要『从后面向前删除变量内容』呢? 这个时候就得使用百分比 (%) 符号了

范例四:我想要删除最后面那个目录,亦即从 : 到 bin 为止的字符串

  echo ${path%:*bin}
  /usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

范例五:那如果我只想要保留第一个目录呢?

  echo ${path%%:*bin}
  /usr/kerberos/sbin

了解了删除功能后,接下来谈谈取代吧

范例六:将 path 的变量内容内的 sbin 取代成大写 SBIN:
  echo ${path/sbin/SBIN}
  /usr/kerberos/SBIN:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
这个部分就容易理解的多了!关键词在于那两个斜线,两斜线中间的是旧字符串,后面的是新字符串

  echo ${path//sbin/SBIN}
  /usr/kerberos/SBIN:/usr/kerberos/bin:/usr/local/SBIN:/usr/local/bin:/SBIN:/bin:/usr/SBIN:/usr/bin:/root/bin
如果是两条斜线,那么就变成所有符合的内容都会被取代

总结

变量配置方式 说明
${变量#关键词}
${变量##关键词}
若变量内容从头开始的数据符合『关键词』,则将符合的最短数据删除
若变量内容从头开始的数据符合『关键词』,则将符合的最长数据删除
${变量%关键词}
${变量%%关键词}
若变量内容从尾向前的数据符合『关键词』,则将符合的最短数据删除
若变量内容从尾向前的数据符合『关键词』,则将符合的最长数据删除
${变量/旧字符串/新字符串}
${变量//旧字符串/新字符串}
若变量内容符合『旧字符串』则『第一个旧字符串会被新字符串取代』
若变量内容符合『旧字符串』则『全部的旧字符串会被新字符串取代』

变量的测试与内容替换

在某些时刻我们常常需要『判断』某个变量是否存在,若变量存在则使用既有的配置,若变量不存在则给予一个常用的配置。

范例一:测试一下是否存在 username 这个变量,若不存在则给予 username 内容为 root
  echo $username
        <==由于出现空白,所以 username 可能不存在,也可能是空字符串
  username=${username-root}
  echo $username
  root     <==因为 username 没有配置,所以主动给予名为 root 的内容。
  username="vbird tsai" <==主动配置 username 的内容
  username=${username-root}
  echo $username
  vbird tsai   <==因为 username 已经配置了,所以使用旧有的配置而不以 root 取代

范例二:若 username 未配置或为空字符串,则将 username 内容配置为 root
  username=""
  username=${username-root}
  echo $username
      <==因为 username 被配置为空字符串了!所以当然还是保留为空字符串!
  username=${username:-root}
  echo $username
  root   <==加上『 : 』后若变量内容为空或者是未配置,都能够以后面的内容替换!

变量配置方式 str 没有配置 str 为空字符串 str 已配置非为空字符串
var=${str-expr} var=expr var= var=$str
var=${str:-expr} var=expr var=expr var=$str
var=${str+expr} var= var=expr var=expr
var=${str:+expr} var= var= var=expr
var=${str=expr} str=expr
var=expr
str 不变
var=
str 不变
var=$str
var=${str:=expr} str=expr
var=expr
str=expr
var=expr
str 不变
var=$str
var=${str?expr} expr 输出至 stderr var= var=$str
var=${str:?expr} expr 输出至 stderr expr 输出至 stderr var=$str

【Shell】变量的取用、删除、取代与替换的更多相关文章

  1. Shell变量的取用、删除、取代与替换

    <<鸟哥的私房菜>> 注意: 通配符适用的地方:shell命令行或者shell脚本中 正则表达式适用的地方:字符串处理时,一般有一般正则和Perl正则. 在文本过滤工具里,都是 ...

  2. 常见linux命令释义(第七天)——ulimit 与变量内容的删除替代与替换。

    linux是一个多用户多任务的系统,不同于windows的单人多任务操作系统.再linux上,在同一个时间点上,可以有多个人同时执行多个任务. 那么假若有10个用户,同时打开了100个100M的文件. ...

  3. shell ## %% 变量内容的删除、替代和替换

    这个写的很清楚: https://www.cnblogs.com/zhaosunwei/p/6831529.html 自己的理解:以后补充 从前向后删除 # 符合替换字符的“最短的”那个 ## 符合替 ...

  4. 变量内容的删除、取代与替换 (Optional)

    变量除了可以直接设置来修改原本的内容之外,有没有办法通过简单的动作来将变量的内容进行微调呢? 举例来说,进行变量内容的删除.取代与替换等!是可以的!我们可以通过几个简单的小步骤来进行变量内容的微调喔! ...

  5. Linux变量内容的删除、取代与替换

    变量内容的删除与取代 范例一:先让小写的 path 自定义变量配置的与 PATH 内容相同 [root@www ~]# path=${PATH} [root@www ~]# echo $path /u ...

  6. 变量内容的删除、取代与替换(optional)

    这部分内容非常繁琐且不易记忆且枯燥,用到来查询即可. 1.变量内容的删除 这一部分比较细枝末节,就不再一一手打了,贴范例图片 #:符合取代文字的最短的一个 ##:符合取代文字的最长的一个 2.变量内容 ...

  7. shell变量的替换,命令的替换,转义字符

    1,shell变量的替换 变量可以根据变量是否为空或者被删除,而被替换为特定的值 ${var}  变量本来的值 $(var:-word)   如果变量为空,或者已被删除那么返回word,但是不改变va ...

  8. shell变量替换 SHELL字符串处理技巧(${}、##、%%)

      在SHELL编程中,经常要处理一些字符串变量.比如,计算长度啊.截取子串啊.字符替换啊等等,常常要用到awk.expr.sed.tr等命令.下面给大家介绍个简单的字符串处理方法,用不着嵌套复杂的子 ...

  9. [转]shell 变量替换

    转自:http://blog.csdn.net/xuhongning/article/details/6191515 1,参数替换: 不含有“:”的,只要定义了,就生效,不管是否为空 含有“:”的,即 ...

随机推荐

  1. BZOJ 1293 SCOI2009 生日礼物 堆

    题目大意:给定一个数轴上n个点,每一个点有一种颜色,一共k种颜色.求一个最短的区间,包括全部k种颜色 卡了一段时间0.0 一開始想二分答案啥的 后来发现数据范围太大写不了0.0 后来去找题解才发现尼玛 ...

  2. OpenCV视频读取播放,视频转换为图片

    转载请注明出处!!! http://blog.csdn.net/zhonghuan1992 OpenCV视频读取播放,视频转换为图片 介绍几个有关视频读取的函数: VideoCapture::Vide ...

  3. _DataStructure_C_Impl:Floyd算法求有向网N的各顶点v和w之间的最短路径

    #include<stdio.h> #include<stdlib.h> #include<string.h> typedef char VertexType[4] ...

  4. MySQL常见的数据类型(八)

    不多说,直接上干货! MySQL常见的数据类型 一.数据类型是什么? 数据类型是指列.存储过程参数.表达式和局部变量的数据特征,它决定了数据的存储格式,代表了不同的信息类型. 有一些数据是要存储为数字 ...

  5. 成长型思维模式Not yet

    当做一件事失败了,要告诉他 暂未成功,暂时没有成功,继续努力,下次就有可能成功. 不及格,暂未及格  是两种思维模式,成长性的思维方式得到的是一个是努力型的人格

  6. pycharm连git和gitee

    http://www.cnblogs.com/feixuelove1009/p/5955332.html https://www.58jb.com/html/171.html

  7. python书写日志的重要性?

    转自:https://blog.csdn.net/weixin_43063753/article/details/82899395 程序为什么要写日志?#为了能够在程序在运行过程中记录错误,方便维护, ...

  8. UIWebview加载H5界面侧滑返回上一级

    一.UIWebview的发现 问题发现:当UIWebview王深层次点击的时候,返回时需要webView执行goBack方法一级一级返回,这样看到的webView只是在该界面执行刷新,并看不到类似iO ...

  9. PHP接口中的静态变量、常量与类中静态变量、常量的区别

    接口: 1 不能够定义静态变量(常量除外) 2 定义的常量 const YOUCONST = VALUE,不能在子类中覆盖,在子类中以 interfaceName::YOUCONST的方式调用 3 不 ...

  10. COPY SAP 标准gui状态

    [转]如何COPY SAP标准gui状态 1.可以自己建立 2.找到合适的ALV程序,然后找到合适的 gui_statu,进行copy. 但是这个是系统有过自定义开发会方便很多,如果没有,那要找标准程 ...