1. 变量设置
1 | <variable>=<value> #为变量赋值 |
- 变量与值之间以一个
=
连接 - 等号两边不能有空格
- 变量名称只能是英文字母与数字,且不能以数字开头
- 变量内容如果有空格可以使用双引号或者单引号将内容包裹起来。一般情况下,变量内容中含有变量的引用,也就是包含
$<variable>
,则用双引号包裹,一般字符则用单引号包裹。 - 可以使用转义字符“\”来使特殊符号变为一般符号。
- 假如变量内容中包含其他命令提供的信息,则需要使用以下两种形式:
`\
`
$(<command>)
- 若为变量增加内容时,可以使用
$(<variable>)addition
或者$<variable>addition
形式。
例如:PATH="$PATH":/home/bin
export
关键字用来设置环境变量,可以传递给当前bash和子进程。- 通常大写字母为系统默认变量,小写字母为自己设置的变量。例如
PATH,HOME,SHELL
等,均为系统变量。
下面写一个简单的例子来验证上面的语法:
1 | tmp="I am tmp" #*定义变量,=两边不能有空格,否则报错 |
注释已经解释的很好了,查看输出内容:
1 | first type I am tmp |
2. 变量的作用域
变量的作用域分为环境变量、全局变量、局部变量。
- 环境变量是系统中已经定义好的变量,输入
env
即可:
1 | SHELL=/bin/zsh |
这些变量都可以直接在shell脚本中获取。
- 全局变量
shell脚本,包括shell脚本中的函数中定义的变量是global的,其作用域从被定义的地方开始,到shell结束或被显示删除的地方为止。 - 局部变量
函数定义的变量可以被显示定义成local的,其作用域局限于函数内。但请注意,函数的参数是local的。如果变量同名,Shell函数定义的local变量会屏蔽脚本定义的global变量。
一个简单的例子说明:
1 | echo "env variable SHELL=${SHELL}" #*输出环境变量SEHLL的默认值 |
查看输出结果:
1 | env variable SHELL=/bin/zsh |
3. 对变量的操作
首先来看一张总的表:
- 变量的替换与删除
变量设置方式 | 说明 |
---|---|
${变量#关键字} | 若变量内容从头开始的数据符合“关键字”,则将符合的最短数据删除 |
$(变量##关键字) | 若变量内容从头开始的数据符合“关键字”,则将符合的最长数据删除 |
${变量%关键字} | 若变量内容从末端向前的数据符合“关键字”,则将符合的最短数据删除 |
${变量%%关键字} | 若变量内容从末端向前的数据符合“关键字”,则将符合的最长数据删除 |
${变量/旧字符串/新字符串} | 若变量内容符合“旧字符串”,则第一个旧字符串会被新字符串替换 |
${变量//旧字符串/新字符串} | 若变量内容符合“旧字符串”,则全部的旧字符串会被新字符串替换 |
1 | path="abcdeaAbcedeA" |
输出结果:
1 | 字符*匹配任意个字符,下边是原有的值 |
- 变量的设置
设置方式 | 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 |
这个比较简单,不写测试用例。主要说明一下’-‘和’:’:
假如-前边的变量未设置值,则取后边的变量假如前边的变量已经设置值,则输出前边的变量。
假如:-一同使用,则前边的变量未设置或者值为””,则用后边的值替换前边的值,否则不替换
4. 变量的声明
- 通过用户输入设置变量的值
声明形式
1 | read [-ptns] <variable> |
编写一个简单的脚本测试:
1 | /bin/zsh |
执行即可:
1 | 请根据下面的提示输入你想要设置的值 |
- declare/typeset
定义形式
1 | declare [-aixrp] variable |
declare -x <variable>
能将变量提升为环境变量,declare +x <varibale>
能将变量取消为环境变量。
bash中的变量假如不是用声明方式,默认都是字符串。声明后可以进行简单的操作。一个简单的例子说明:
1 | bin/bash |
1 | 100+10 |