03变量和引用
深入认识变量
什么是变量
变量的命名
变量的类型
实例:
- #! /bin/bash
-
- x=123
- let "x += 1"
- echo "x = $x"
- echo # 输出空行
-
- y=${x/1/abc}
- echo "y = $y"
- declare -i y
- echo "y = $y"
- let "y += 1" # 遇到含有非数值的字符串,字符串转换为整数0
- echo "y = $y"
- echo
-
- z=abc22
- echo "z = $z"
- m=${z/abc/11}
- echo "m = $m"
- let "m += 1"
- echo "m = $m"
- echo
-
- # 空变量或者空串转换为整数都为0
- n=""
- echo "n = $n"
- let "n += 1"
- echo "n = $n"
- echo
-
- echo "p = $p"
- let "p += 1"
- echo "p = $p"
-
-
变量的定义
可以直接使用变量来定义变量,例如:
- #! /bin/bash
-
- a=1
- b="hello world"
使用declare来声明变量,基本语法:
- declare attribute variable
常用的属性:
-p:
-i:
-r:只读变量
-a:数组
-f:函数
-x:将变量设置为环境变量,这样随后的脚本和程序都可以使用
实例:
- #! /bin/bash
- x=6/3
- echo "x = $x"
-
- declare -i x
- echo "x = $x"
- x=6/3
- echo "x = $x"
-
- x=hello
- echo "x = $x"
- # bash并不内置对浮点数的支持
- x=3.14
- echo "x = $x"
-
- declare +i x
- x=6/3
- echo "x = $x"
- x=$[6/3]
- echo "x = $x"
- x=$((6/3))
- echo "x = $x"
- declare -r x
- echo "x = $x"
- x=5
- echo "x = $x"
-
执行结果:
- delphi@delphi-vm:~/shell/chapter03$ ./test.sh
- 6/3
- x = 6/3
- x = 2
- x = 0
- ./test.sh: 行 13: 3.14: 语法错误: 无效的算术运算符 (错误符号是 ".14")
- x = 0
- x = 6/3
- x = 2
- x = 2
- ./test.sh: 行 24: x: 只读变量
- x = 2
-
变量和引号
-
单引号
-
双引号
-
反引号
例如:
- #! /bin/bash
- echo "The current directory is `pwd`"
变量的作用域
-
全局变量
-
局部变量
例子:
- #! /bin/bash
-
- func()
- {
- echo "$v1"
- v1=200
- }
- v1=100
- func
- echo "$v1"
执行结果:
100
200
注意: 函数内部定义的变量也是全局变量
全局变量和局部变量的区别:
- #! /bin/bash
-
- func()
- {
- echo "$v1"
- lacal v1=200
- echo "$v1"
- }
- v1=100
- func
- echo "$v1"
执行结果:
100
200
100
-
系统变量
如下:
-
环境变量
运用命令:set | more 查看所有的环境变量,环境变量一般用大写表示
变量的赋值和清空
变量赋值
赋值号左右不能够接空格,否则shell会将其视为命令。
引用变量的值
建议使用大括号将变量名进行明确界定,不用简写。
例如:echo "${v4}abc"
清除变量
unset 变量 语句
引用和替换
引用
单引号为全引用,如:
- #! /bin/bash
-
- v1="hello"
- echo 'world,$v1'
输出: world,$v1
命令替换
有两种语法:
例如:
- #! /bin/bash
-
- v1='pwd'
- echo 'The current directory is $v1'
- #! /bin/bash
-
- v1=$(pwd)
- echo 'The current directory is $v1'
转义
如:echo $SHELL
结果:$SHELL