变量

  • 变量是什么?
  • 变量定义
  • 环境变量(全局变量)
  • 变量读取——read
  • 变量声明——declare/typeset
  • 变量运算
  • 变量删除
  • 变量替换
  • 变量判空赋值

变量是什么?

变量指的是系统中可改变的量

变量定义

  • 使用=连接,=两边不能有空格
  • 由字母和数字组成,但开头不能为数字
  • 若=右边有空格," 可保证特殊字符原本属性,而 ’ 内的特殊字符仅为一般字符,如下
  • 可用 \ 转义特殊字符,如下转义空格
  • 当变量需要借助其他指令时,可用 `括起来或者$
  • 扩充变量即直接为其赋值,但不能影响其旧值
  • 若变量要被子程序使用,可通过export将变量变成环境变量
  • 取消变量使用命令 unset

环境变量(全局变量)

系统环境变量在linux中为 PATH,由冒号分隔,记录了命令的存储路径

其他环境变量可通过 env 显示

命令 set 也可查看所有变量,此外与bash有关的变量也会被列举出来,此外set还可用于设置环境,加上参数 -u 表示变量为空是提示错误信息,-v表示信息被输出前会先原信息,-x表示指令被执行前,会显示指令内容

  • 环境变量 $ 是当前shell的PID
  • 环境变量 ? 为上一条命令或程序的返回值,正常情况为0

export除了可看自定义变量变成环境变量外,还可列出当前环境变量

变量读取——read

命令 read 可从键盘中读取字符赋值变量,-p 后面接上提示,-t 接上等待秒数

变量声明——declare/typeset

命令 declare/typeset 用于声明变量类型,-a为数组,-i为整型,-x为环境变量,-r为只读变量,不加参数输出所有变量,-p显示变量类型,+为相反,如下是对数组的定义

变量运算

默认变量为字符串型,对其的 ±*/ 并不会生效,需要将其声明为整型

此外整型计算还可以通过 (()) 里面放计算公式

而浮点型的计算则需要借助命令 bc完成

变量删除

设置方式功能
${var#key}从左往右查找key,删除最短匹配内容
${var##key}从左往右查找key,删除最长匹配内容
${var%key}从右往左查找key,删除最短匹配内容
${var%%key}从右往左查找key,删除最长匹配内容

在#后面加上要删除的内容,从前往后查找

#和##搭配通配符*,分别表示删除最短匹配内容和最长匹配内容

变量替换

设置方式功能
${var/key/newkey}从左往右查找第一个key,替换为newkey
${var//key/newkey}从左往右查找所有key,替换为newkey

变量判空赋值

设置方式若test为空若test=“”若test为非空字符串总结
var=${test-str}var=strvar=“” (不变)var=$test- 可覆盖空
var=${test:-str}var=strvar=strvar=$test:- 可覆盖空及""

如下,若name为空,则name=song,若name不为空,则对name的设置无效

如下,若name='“,- 对name设置无效,加上 : 才可以对”"赋值

设置方式若test为空若test=“”若test为非空字符串总结
var=${test+str}var为空 (不变)var=strvar=str+ 可覆盖非空
var=${test:+str}var为空var=“”var=str:+ 可覆盖非空但不包括""

如下为""时,+生效,:+不生效

设置方式若test为空若test=“”若test为非空字符串总结
var=${test=str}var=test=strtest=“”(不变)
var为空
var=$test= 覆盖空并改变判断值
var=${test:=str}var=test=strvar=test=strvar=$test:= 覆盖空及""并改变判断值

如下当name2=“”,=不生效,:=生效

设置方式若test为空若test=“”若test为非空字符串总结
var=${test?str}str输出stderrvar=“”(不变)var=$test? 为空输出错误信息
var=${test:?str}str输出stderrstr输出stderrvar=$test:? 为空及""输出错误信息

如下当name2=“”,?不生效,:?生效

更多推荐

Linux基础——变量