当前位置:   article > 正文

Shell 变量

shell 变量

shell 变量

一、定义变量

变量名的命名规则同python:

  • 英文字母,数字和下划线_
  • 首字符不能是数字
  • 不能使用bash中的关键字(help命令查看保留关键字)
name=[value]
  • 1

如果value没有给出,变量将被赋值为空字符串。

注意:赋值等号两边不能有空格。

定义变量有多种形式:
当值中不包含空格时,可以不需要引号。当值中需要包含空格时需要用引号包含。如果只是输出字符的字面值,单引号和双引号没有区别。

info='hello world'
info="hello world"  # 没有区别
  • 1
  • 2
二、使用变量

使用一个定义过的变量,只要在变量名前面加$符号即可,如:
在这里插入图片描述

变量名外面的花括号是可选的,加不加都行,加花括号是为了帮助解释器识别变量的边界,比如下面这种情况:
在这里插入图片描述
如果不给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                                                                                                                               
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

发现脚本里访问不到变量name,应为定义的name是局部变量只在当前终端进程中有效

2、全局变量

在当前shell中任何地方可以使用的变量,且在子shell中也有效。通过命令env可以查看当前shell中的所有全局变量。定义一个全局变量可以使用export命令

例如:

export name=test  # 定义全局变量name
vim test.sh
echo $name
~                                                                                                                      
~   

bash test.sh #命令行执行test.sh 

#输出
test
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

但是export定义的全局变量是临时的,当关闭执行定义的shell进程后,定义的变量就会被销毁,所以通过export定义的全局变量只能向下传递,也即是只能是父shell传递给子shell。

例如:

echo "export name=test" > test.sh  # 在脚本中定义全局变量name并赋值test
bash test.sh
echo $name
# 输出空,因为name是在执行test.sh脚本启动的子进程中定义的,执行完毕就会被销毁。
  • 1
  • 2
  • 3
  • 4

那如何定义一个所有shell都可以访问的变量呢。本质上来讲没有一个这样的变量。但是可以通过启动shell时预定义全局变量来实现这个目的。也就是接下来的环境变量。

3、环境变量

所有的程序,包括shell启动的程序,都能访问环境变量,有些程序需要环境变量来保证其正常运行。必要的时候shell脚本也可以定义环境变量。

环境变量本质上就是全局变量,只不过它是在启动终端(shell主进程)时通过执行初始化脚本预定义的。

启动终端后直接输入env命令显示得所有变量都是环境变量。要定义环境变量可以在一下文件中通过export定义:

~/.bashrc 只对当前用户的终端有效
~/.profile 只对当前用户的终端有效
/etc/bash.bashrc对所有用户的终端有效
  • 1
  • 2
  • 3

注意:不同linux,不同终端启动文件有所不同,但是原理相同。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/215939
推荐阅读
相关标签
  

闽ICP备14008679号