特点:1 shell变量没有数据类型的区分
2 Shell 把任何存储在变量中的值,皆视为以字符组成的“字符串”。
3 设定的变量值只在当前shell环境中有作用
4 不能以数字开头
5 =号两边不能存在空格
6 若变量值中存在空格,必须用括号将变量值括起来 I = “Jack Black”
在编写shell时,如果变量未赋值,后续使用时不会出现任何错误。如果要显示错误提示,则需要命令 shopt -s -o nounset
shopt -s -o nounset解析如下
.范例如下
[root@localhost ~]# vim test1.sh #!/bin/bash echo $Infomix [root@localhost ~]# sh test1.sh # 未提示任何错误 [root@localhost ~]# vim test1.sh [root@localhost ~]# vim test1.sh #!/bin/bash shopt -s -o nounset #添加错误提示 echo $Infomix [root@localhost ~]# sh test1.sh test1.sh:行4: Infomix: 为绑定变量 #提示错误
二 取得变量值
$变量名称=${变量名称}
如果变量作为字符的一部分输出时,则必须用${}将变量括起来,否则shell将无法识别变量。$会将后面的所有字符当做变量的一部分,肯定是找不到变量的
[root@localhost ~]# myname='lsq' [root@localhost ~]# echo $myname lsq [root@localhost ~]# echo ${myname} lsq [root@localhost ~]# echo hello${myname}boy hellolsqboy [root@localhost ~]# echo hello$mynameboy hello
如果后面接的不是字符,也不是_下划线,则不需要{}来括起来。变量后接中文也是可以的。呵呵。
[root@localhost ~]# dir2=sbin [root@localhost ~]# echo /usr/local/$dir2/config /usr/local/sbin/config
$是去变量值的特殊字符,如果要显示$怎么操作,转义字符 \ 或者用单引号括起来 '$i'
Bash除了echo之外,还提供了一个c类似的printf的语法。感觉这个东西有字符串格式化的意思。体会一下
%s 以字符串的形式显示变量值
[root@localhost ~]# printf "%s" "$dir2" sbin[root@localhost ~]# printf "%s\n" "$dir2" sbin #\n和c语言一样,都是换行的意思。 [root@localhost ~]#
[root@localhost ~]# SP='ABC 123 XYZ' [root@localhost ~]# printf "%q\n" "$SP" ABC\ 123\ XYZ #%q会将变量值中的特殊字符,用\字符转义,实例中就是在空格前加\