赞
踩
变量名的命名规则同python:
name=[value]
如果value没有给出,变量将被赋值为空字符串。
注意:赋值等号两边不能有空格。
定义变量有多种形式:
当值中不包含空格时,可以不需要引号。当值中需要包含空格时需要用引号包含。如果只是输出字符的字面值,单引号和双引号没有区别。
info='hello world'
info="hello world" # 没有区别
使用一个定义过的变量,只要在变量名前面加$符号即可,如:
变量名外面的花括号是可选的,加不加都行,加花括号是为了帮助解释器识别变量的边界,比如下面这种情况:
如果不给info变量加花括号,写成echo “$ infoworld”,解释器就会把$后面都当做一个变量。
推荐给所有变量加上花括号,这是个编写shell脚本的好习惯。
使用 readonly 命令可以将变量定义为只读变量,只读变量的值不能被改变。
下面的例子尝试更改只读变量,结果报错:
unset 命令可以删除变量,变量被删除后不能再次使用。unset 命令不能删除只读变量。
以上实例执行将没有任何输出。
运行shell时,会同时存在三种变量:
1、局部变量
局部变量在脚本或命令中定义,仅在当前shell进程中有效。
例如:
在命令行中定义变量name,创建脚本test.sh并访问变量name,则访问不到
name='test' #在命令行中定义变量name
vim test.sh
echo $name
~
~
bash test.sh #命令行执行test.sh
发现脚本里访问不到变量name,应为定义的name是局部变量只在当前终端进程中有效
2、全局变量
在当前shell中任何地方可以使用的变量,且在子shell中也有效。通过命令env可以查看当前shell中的所有全局变量。定义一个全局变量可以使用export命令
例如:
export name=test # 定义全局变量name
vim test.sh
echo $name
~
~
bash test.sh #命令行执行test.sh
#输出
test
但是export定义的全局变量是临时的,当关闭执行定义的shell进程后,定义的变量就会被销毁,所以通过export定义的全局变量只能向下传递,也即是只能是父shell传递给子shell。
例如:
echo "export name=test" > test.sh # 在脚本中定义全局变量name并赋值test
bash test.sh
echo $name
# 输出空,因为name是在执行test.sh脚本启动的子进程中定义的,执行完毕就会被销毁。
那如何定义一个所有shell都可以访问的变量呢。本质上来讲没有一个这样的变量。但是可以通过启动shell时预定义全局变量来实现这个目的。也就是接下来的环境变量。
3、环境变量
所有的程序,包括shell启动的程序,都能访问环境变量,有些程序需要环境变量来保证其正常运行。必要的时候shell脚本也可以定义环境变量。
环境变量本质上就是全局变量,只不过它是在启动终端(shell主进程)时通过执行初始化脚本预定义的。
启动终端后直接输入env命令显示得所有变量都是环境变量。要定义环境变量可以在一下文件中通过export定义:
~/.bashrc 只对当前用户的终端有效
~/.profile 只对当前用户的终端有效
/etc/bash.bashrc对所有用户的终端有效
注意:不同linux,不同终端启动文件有所不同,但是原理相同。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。