变量的名字就是变量保存值的地方. 引用变量的值就叫做变量替换 .
$
如果 variable1 是一个变量的名字, 那么 $variable1 就是引用这变量的值, 即这边变量所包含的数据.
被一对双引号 (" ")括起来的变量替换是不会被阻止的. 所以双引号被称为部分引用, 有时候又被称为"弱引用". 但是如果使用单引号的话(' '), 那么变量替换就会被禁止了, 变量名只会被解释成字面的意思, 不会发生变量替换. 所以单引号被称为全引用, 有时候也被称为"强引用".
注意 $variable 事实上只是 ${variable} 的简写形式. 在某些上下文中 $variable 可能会引起错误,这时就需要用 ${variable} 了.
* 一个未初始化的变量将会是"null"值 - 就是未赋值(但并不是代表值是0!).在给变量赋值之前就使用这个变量通常都会引起问题.
=
赋值操作( 前后都不能有空白 )
使用$(...)机制来进行变量赋值(这是一种比后置引用(反引号`)更新的一种方法). 事实上这两种方法都是命令替换的一种形式.
Bash变量是不区分类型的
不像其他程序语言一样, Bash并不对变量区分"类型". 本质上, Bash变量都是字符串. 但是依赖于具体的上下文, Bash也允许比较操作和整数操作. 其中的关键因素就是, 变量中的值是否只有数字.
特殊的变量类型
局部变量
环境变量这种变量只有在代码块或者函数中(参见函数中的局部变量)才可见.
位置参数这种变量将影响用户接口和shell的行为
如果一个脚本要设置一个环境变量, 那么需要将这些变量"export"出来, 也就是需要通知到脚本本地的环境. 这是export命令的功能.
从命令行传递到脚本的参数:$0 , $1 , $2 , $3. . .$0 就是脚本文件自身的名字, $1 是第一个参数, $2 是第二个参数, $3 是第三个参数, 然后是第四个. [1] $9 之后的位置参数就必须用大括号括起来了,比如, ${10} , ${11} , ${12} .
{}标记法提供了一种提取从命令行传递到脚本的最后一个位置参数的简单办法. 但是这种方法同时还需要使用间接引用.
args=$# # 位置参数的个数. lastarg=${!args} # 或:lastarg=${!#}
如果脚本需要一个命令行参数, 而在调用的时候, 这个参数没被提供, 那么这就可能造成给这个参数赋一个null变量, 通常情况下, 这都会产生问题.一种解决这个问题的办法就是使用添加额外字符的方法, 在使用这个位置参数的变量和位置参数本身的后边全部添加同样的额外字符.
#/bin/bash
variable1_=$1_ # 而不是 variable1=$1 这将阻止报错, 即使在调用时没提供这个位置参数.
critical_argument01=$variable1_ # 这个扩展的字符是可以被消除掉的, 就像这样.
variable1=${variable1_/_/} # 副作用就是$variable1_多了一个下划线.
if [ -z $1 ]
then
exit $E_MISSING_POS_PARAM
fi
exit 0