在计算机中,程序是由指令和数据组成,而数据在计算机中表现为文件和变量,在一般的理解上,变量就是一段连续的内存空间,为这一段内存空间取名,称为变量名,在这段内存中所存储的数据称为变量值,往这段内存空间中放入东西的行为就叫做赋值操作。


VALUENAME的命名规范:

在linux中的赋值操作由“=:”符号完成,格式为:VALUENAME=VALUE(将VALUE值赋值给VALUENAME这个变量)。VALUENAME代表变量的名字,只能以字母或下划线开头,不能使用数字开头,但是后面可以是任意字母、数字或下划线。在linux的bush中是严格区分大小写的,也就是说“NAME”和“name”是两个不同的名字。变量的命名方法因人而异,但是最好按照一个大家都认可的方式来命名,在一个名字中可以大写,也可以小写,通常的书写规范有两种,一种是全大写,比如“MYFILE”;第二种是有大写又有小写的驼峰式,比如:“MyFile”。在给变量命名的时候尽量做到见名之意,比如一个变量代表家,那么就给它起名为“home”或“_home”,这是为了在以后再看到这个变量的时候一眼就知道它的意思。当然,自己命名的变量不能和已经存在的变量名相同,如记录当前工作目录的“PWD”变量就不能在自己命名变量的时候与之重复。


变量的分类

根据不同的编程语言,变量可以分为强变量和弱变量。强变量是指那些必须在使用前先声明,而且要声明其类型,严格区分变量类型的变量,就好像在C语言中如果在使用一个变量之前没有声明其类型就没有办法使用这个变量。这种变量在使用的时候和它的声明类型息息相关,比如:“255”这个东西,如果按照整数型保存,就是一个字节(Byte)(1111 1111);但是如果按照字符类型保存,它就是三个字节(Byte),占用24位,存储为2,5,5三个字节。而若变量就是可以随时使用随时声明,甚至可以不声明就使用。。不对变量类型做硬性要求,如果没有指明变量类型,统一按照字符型对待。相比之下强变量更加严谨,而弱变量更加方便。bash的变量就是弱变量(bash没有浮点型(但是能使用小数))。


bash的变量分类

bash属于弱变量,所以其在使用的时候既可以声明,又可以不用声明。根据不同的作用范围将bash中的变量分为了三种,第一种是作用范围为整个shell进程,包括其子shell的全局变量(环境变量)。第二种是作用范围仅仅只是当前登陆的shell,不包括子shell的本地变量。第三种是作用范围仅仅只是当前的程序段,一般用于函数的局部变量。在bash中引用变量的值的格式为:${VALUENAME}==>$VALUENAME(简写,但是有些特殊情况下必须加上花括号)。在bash中存在一些默认的全局变量,例如:位置参数变量:$1,$2...$n(上一个命令的第几个参数)和特殊变量:$?(最近一次执行状态返回值),$#(位置参数的个数以十进制表示),$*(包含了从一开始的所有位置参数,当使用双引号来引用展开的时候,它展开为以特殊变量“IFS(分隔符)”的第一个字符分隔的值),$@(从一开始展开为位置参数,当使用双引号引用展开的时候,它展开为一个单独的字符串),$$(展开为当前shell的进程标识符),$0(展开为当前shell或者shell脚本的文件名),$LANG(语言,改变语言:LANG=en_US(换成英文)),$PS1(命令提示符格式)([\u@\h \W]\$),...


变量的使用

变量的赋值方法是:VALUENAME=VALUE,不过这种方法是声明本地变量,只能在当前shell中使用。如果要声明全局变量,则需要使用export(env、set)命令,或者declare命令,格式为export VALUENAME或export VALUENAME=VALUE。使用declare命令的选项有

-a声明索引数组(如果支持)

-A声明关联数组(如果支持)

-i声明整型变量

-I声明变量并将变量值中的字符转换为小写字母

-u声明变量并将变量值中的字符转换为大写字母

-x声明变量并将其导出为环境变量

-r声明变量为只读变量(常量)(无法修改,无法撤销)注销后消失

声明局部变量:local VALUENAME=VALUE

在一般情况下变量都是现做现用,并不需要更改配置文件,当需要更改一些特殊变量的时候就需要改配置文件了,配置文件有以下两种

通用配置文件

/etc/bashrc

/etc/profile

私人配置文件

~/.bashrc

~/.bash_profile