4.1 变量替换
变量替换: 是指通过变量名替换成其内部包含的变量值.
变量赋值, variable 这个是变量名, $variable 这个是变量值.
a=375
hello=$a
注意: 赋值时, 千万不要有空格
“” 双引号不会影响变量替换,
‘’ 单引号中不会发生变量替换
$variable 是 ${variable}的简单化表示, 如果使用 $variable这种语法有的情况下会引起歧义.
例子:
hello=375
echo
hello #
hello
echo $hello #
375
echo ${hello} # 375
echo “$hello” # 375
echo “${hello}” # 375
hello=”A B C D”
echo $hello
# A B C D
echo “$hello” # A B C
D
注意, 这里输出的结果不一样. 因为在””号内会保留空白, 所以,
如果变量中有空格 space, 那么就必须使用 双引号. 这里指的是等号右边必须使用””
mixed_bag=2\ ---\ Whatever # 使用 \ 转义字符来转义空格, 这样就不用使用双引号了
# 输出结果是 2 --- Whatever
hello=
# 这个含义是给 hello 赋值为 null
# Note that setting a variable to a null value is not the same as unsetting
it.
unset varibale
注意: 跟 C 一样, 使用变量之前要进行初始化, 否则该变量就是 null, 如果使用, 就会有大问题.
4.2 变量赋值
注意赋值=号左右不能有空格.
let a=16+5 # let 赋值, 如果直接使用 a=16+5, 那么输出时, 结果就是
16+5, 而不是计算出的结果 21.
变量之间的赋值, b=$a
command substitution 命令替换
a=`echo Hello!` # assigns result of ‘ls –l’ command
to ‘a’
echo
$a
# 显示的是 ls –l 的内容, 因为变量a的值是 ls –l 命令的结果
使用 $() 这个办法, 这是一个新的办法对比 ``, 例如
r=$(cat /etc/redhat-release)
arch=$(uname -m)
4.3 bash 变量不区分类型
a=2334
# 2334 数字
let “a += 1”
echo “a =
$a”
# 2335
b=${a/23/bb}
# 变量替换, bb for 23
echo
“b=$b”
# bb35 用bb替换了原来的23
let “b +=
1”
# bb35 + 1 =
echo “b =
$b”
# b = 1
echo
c=bb34
echo “c =
$c”
# c= bb34
4.4 特殊的变量类型
local variables, 在代码块{} 或者是函数中定义的变量
environmental variables, 环境变量
每个进程都有自己的环境, 这个环境变量除了影响它本身的环境外, 还影响它的子进程.
注意: 分配给环境变量的空间时有限的, 如果超出了, 就会产生错误.
If a script sets environmental variables, they need to be “exported”, that
is, reported to the environment local to the script.
脚本中定义的环境变量, 只能针对这个脚本内(执行这个脚本本身就是个进程)和这个脚本中的子bash, 不能影响到调用这个脚本命令的那个环境变量,
例如我们设置 oracle 的环境变量时, 我们需要到特定的文件下, 而不是我们随便创建一个脚本文件就可以设置环境变量的,
因为如果是随便创建一个文件设置的环境变量, 将不能影响外部(调用脚本命令)的环境.
positional parameters 从命令行传进来的参数
$0 脚本文件名
$1 第1个参数
$2 第2个参数 等等
$9 以后, 就必须使用这种形式 ${10},
$# 表示参数的总个数
${!#} 表示最后一个参数