Shell 变量

shell 变量

一、定义变量

变量名的命名规则同python:

  • 英文字母,数字和下划线_
  • 首字符不能是数字
  • 不能使用bash中的关键字(help命令查看保留关键字)
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,不同终端启动文件有所不同,但是原理相同。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

久醉绕心弦,

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值