4. 变量和参数的介绍
4.1 变量替换
$ 变量替换操作符
只有变量被声明,赋值,unset或者exported或者变量代表一个single时候,变量才会是以本来的面目出现在脚本里。
在""中还是会出现变量替换,叫弱引用;在''中不会出现变量替换,叫强引用。
Example 4-1. 变量赋值和替换
4.2 变量赋值
= 赋值操作符(前后都不能有空格)
不要与-eq混淆,那个是test
Example 4-2. 变量赋值,一般的和比较特殊的
4.3 Bash变量是不分类型的
本质上,bash变量都是字符串。但依赖于上下文,bash也允许比较操作和算术操作,决定这些的关键因素就是,变量中是否有数字。
4.4 特殊的变量类型
------------------
local variables
这种变量只有在代码块或者是函数中才可见
------------------
environmental variables
这种变量将改变用户接口和 shell 的行为.在一般的上下文中,每个进程都有自己的环境,就是一组保持进程可能引用的信息的变量.这种情况下,shell 于一个一般进程是相同的.
每次当 shell 启动时,它都将创建自己的环境变量.更新或者添加新的环境变量,将导致 shell 更新它的环境,同时也会影响所有继承自这个环境的所有子进程(由这个命令导致的).
注意:分配给环境变量的空间是受限的.创建太多的环境变量将引起空间溢出,这会引起问题.
关于 eval 命令,具体见第11 章
bash$ eval "`seq 10000 | sed -e 's/.*/export var&=ZZZZZZZZZZZZZZ/'`"
bash$ du
bash: /usr/bin/du: Argument list too long
如果一个脚本设置了环境变量,需要export 它,来通知本脚本的环境,这是export命令的功能.脚本只能对它产生的子进程export 变量.一个从命令行被调用的脚本export 的变量,将不能影响调用这个脚本的那个命令行 shell 的环境.
------------------
positional parameters
就是从命令行中传进来的参数,$0, $1, $2, $3...
$0就是脚本文件的名字,$1 是第一个参数,$2 为第2 个...,$9以后就需要打括号了,如${10},${11},${12}...两个值得注意的变量$*和$@,表示所有的位置参数.