【简述】

变量即计算机中用于记录一个值的符号,而这些符号可用于不同的运算处理中。

通常变量与值是一对一的关系,可以通过表达式读取它的值并赋值给其它变量,也可以直接指定数值赋值给任意变量。

为便于运算和处理,大部分的编程语言会区分变量的类型,用于分别记录数值、字符或者字符串等等数据类型。

shell 变量也基本如此,有不同类型,可以参与运算,有作用域限定。

【变量类型】

在运行 shell 时,有三种变量:

1)局部变量:当前 shell 进程私有用户自定义变量,仅在当前 shell 实例中有效,其他 shell 启动的程序不能访问。

2)shell 变量:shell 变量是由 shell 程序本身内建的变量,其中有一部分是环境变量,有一部分是局部变量,这些变量保证了shell的正常运行。

3)环境变量: 由局部变量导出。所有的程序,都能访问环境变量,有些程序依靠环境变量来保证其正常运行。

【变量定义与使用】

shell 变量不需要进行任何声明,直接定义即可,但使用 shell 变量要用到$符号。

同时,变量名的命名须遵循如下规则:

1)变量名只能是英文字母、数字或者下划线,且不能以数字为开头。

2)不能使用 bash 里的关键字。

注:

1.变量名和等号之间不能有空格,否则会被认为是命令。

2.使用变量时,加 {} 可以防止歧义

【更改变量为只读】

使用 readonly 命令可以将变量定义为只读变量,只读变量的值不能被改变。

【修改已有变量】

${变量名#匹配字串} 从头向后开始匹配,删除符合匹配字串的最短数据
${变量名##匹配字串} 从头向后开始匹配,删除符合匹配字串的最长数据
${变量名%匹配字串} 从尾向前开始匹配,删除符合匹配字串的最短数据
${变量名%%匹配字串} 从尾向前开始匹配,删除符合匹配字串的最长数据
${变量名/旧的字串/新的字串} 将符合旧字串的第一个字串替换为新的字串
${变量名//旧的字串/新的字串} 将符合旧字串的全部字串替换为新的字串

例:

【删除已有变量】

使用 unset 命令可以删除变量,变量被删除后就无法再次使用。

注:只读变量无法删除,只有重启后才会自动消失。

【环境变量】

在所有的 Linux 系统中,每个进程都有其各自的环境变量设置,且默认情况下,当一个进程被创建时,除非创建过程中明确指定,它将继承其父进程的绝大部分环境设置。

环境变量的作用域比自定义变量的要大,Shell 的环境变量作用于其自身和它的子进程,Shell 程序也作为一个进程运行在操作系统之上,而在 Shell 中运行的大部分命令都将以 Shell 的子进程的方式运行。

可以将环境变量简单地理解为在当前进程的子进程有效的变量,为与普通变量区分,通常习惯将环境变量名设为大写。

1.打印环境变量信息

set 显示当前 Shell 所有变量
env 显示与当前用户相关的环境变量,也可让命令在指定环境中运行
export 显示从 Shell 中导出成环境变量的变量,也可将自定义变量导出为环境变量

2.环境变量永久生效

按变量的生存周期来划分,Linux 变量可分为两类:

1)永久的:需要修改配置文件,变量永久生效;

2)临时的:使用 export 命令行声明即可,变量在关闭 shell 时失效。

当关机或关闭当前的 shell 之后,环境变量会消失。

在 /etc 下有两个重要文件 /etc/bashrc 和 /etc/profile ,它们分别存放的是 shell 变量和环境变量。

如果想要添加一个对所有用户永久生效的环境变量,只需要打开 /etc/profile,在里面加上想添加的环境变量即可。

注:在每个用户目录下存在一个隐藏文件 .profile ,其只对当前用户永久生效。

3.命令的查找路径与顺序

在 Shell 中输入一个命令,Shell 是通过环境变量 PATH 来进行搜索然后执行的,这个 PATH 里面就保存了 Shell 中执行的命令的搜索路径。

通常 PATH 目录下放的都是可执行文件,当在 Shell 中执行一个命令时,系统就会按照 PATH 中设定的路径按照顺序依次到目录中去查找,如果存在同名的命令,则执行先找到的那个。

4.添加自定义路径到“ PATH ”环境变量

命令格式:PATH=$PATH:绝对路径

按如上命令给 PATH 环境变量追加了一个路径,但也只是在当前 Shell 有效,一旦退出终端,再打开就会发现又失效了。

为避免上述问题,可采用让其自动执行的方式配置脚本。

在每个用户的 home 目录中有一个 Shell 每次启动时会默认执行一个配置脚本,用于初始化环境,包括添加一些用户自定义环境变量等,如:zsh 的配置文件是 .zshrc,相应 Bash 的配置文件为 .bashrc ,它们在 etc 下还都有一或多个全局的配置文件,但一般只修改用户目录下的配置文件。

可采用下列命令直接添加内容到 .zshrc 中:echo "PATH=$PATH:绝对路径" >> .zshrc

注:>> 表示将标准输出以追加的方式重定向到一个文件中(> 是以覆盖的方式重定向到一个文件中),在指定文件不存在的时会创建新的文件。

5.让环境变量立即生效

在 Shell 中修改了一个配置脚本文件后,每次都要退出终端重新打开甚至重启主机之后其才能生效,为避免麻烦,可以使用 source 命令来让其立即生效。

命令格式:source 配置文件名

Linux 的 Shell 变量相关推荐

  1. linux中shell变量$#,$@,$0,$1,$2的含义解释

    linux中shell变量$#,$@,$0,$1,$2的含义解释:  变量说明:  $$  Shell本身的PID(ProcessID)  $!  Shell最后运行的后台Process的PID  $ ...

  2. linux中sh+$0,浅谈linux中shell变量$#,$@,$0,$1,$2的含义解释

    摘抄自:ABS_GUIDE 下载地址:http://www.tldp.org/LDP/abs/abs-guide.pdf linux中shell变量$#,$@,$0,$1,$2的含义解释: 变量说明: ...

  3. linux变量中代,linux中shell变量$#,$@,$0,$1,$2和变量${0%/*}

    一直傻傻搞不清,还是梳理一下吧. linux中shell变量$#,$@,$0,$1,$2的含义解释: 变量说明: $$ Shell本身的PID(ProcessID) $! Shell最后运行的后台Pr ...

  4. 浅谈linux中shell变量$#,$@,$0,$1,$2,$?的含义解释

    浅谈linux中shell变量$#,$@,$0,$1,$2,$?的含义解释 下面小编就为大家带来一篇浅谈linux中shell变量$#,$@,$0,$1,$2的含义解释.小编觉得挺不错的,现在就分享给 ...

  5. Linux的shell变量

    Linux的变量可分为两类:环境变量和本地变量 环境变量,或者称为全局变量,存在与所有的shell中,在你登陆系统的时候就已经有了相应的系统定义的环境变量了.Linux的环境变量具有继承性,即子she ...

  6. Linux中shell变量作用域笔记

    变量的作用域又可以叫做"命名空间",表示变量的上下文,同名的变量可以在多个命名空间定义,彼此互相独立. 在linux系统中,不同的进程ID的Shell默认为一个不同的命名空间. 比 ...

  7. Linux有关Shell变量的笔记

    1.Shell变量的命名规则 Shell变量命名规则必须以字母或者下划线开头,后面可以跟数字.字母或者下划线,变量的长度一般没有限制.需要注意的是变量的命名是区分大小写的.一般情况下变量的命名要有意义 ...

  8. Linux中shell变量基础概念笔记

    1.变量的概念 其实shell中的变量是指向系统中一块存储数据的内存空间.变量的形式有局部变量和环境变量两种.并且shell变量属于弱类型的变量,可以不指定变量的类型就可以使用. 2.局部变量 局部变 ...

  9. (转载)linux中shell变量

    (转载)http://blog.csdn.net/zahuopuboss/article/details/8633891 为使shell编程更有效,系统提供了一些shell变量.shell变量可以保存 ...

最新文章

  1. Spark下的word2vec模型训练
  2. iOS: 彻底理解position与anchorPoint
  3. 联想笔记本键盘排线,联想笔记本原装键盘价格表 联想笔记本键盘如何更换
  4. oracle查询锁表SQL
  5. 统计学习方法——机器学习和统计学习
  6. 使用阿里云对象存储OSS搭建网盘
  7. 基于UML的公开招聘教师管理系统建模的研究和设计
  8. 专门为某种用途设计的计算机称为,专门为某种用途而设计的计算机,称为( )计算机。...
  9. 安全绳使用方法图解_安全绳的正确使用方法、使用注意事项及应用
  10. 前端开发使用的 安卓模拟器_7个最佳的Android模拟器
  11. 基于Python的书店销售管理系统
  12. RAID的几种工作模式
  13. 如何将EXCEL中同一个工作薄多张工作表合并
  14. 公鸡一个五块钱,母鸡一个三块钱,小鸡三个一块钱,现在要用一百块钱买一百只鸡,使用穷举法求公鸡、母鸡、小鸡各多少只。
  15. hbase热点问题解决(预分区)
  16. java招投标管理系统的区别_招投标管理系统的特点和系统价值表现是怎么?
  17. 用java写敏感词过滤器的代码
  18. unity开发工具:文本颜色赋值
  19. 2020年中国新基建七大产业链全景图
  20. MASM 8.0 下载 安装方法

热门文章

  1. 终于有人把监督学习讲明白了
  2. 1947-2020 NBA总冠军次数排行榜
  3. 21道Python经典面试题,助你offer拿到手软!
  4. 面试:Java线程有哪几种状态,它们之间是如何切换的
  5. 教你消灭 Java 代码的“坏味道”
  6. 亿级流量请求,多级缓存解救
  7. JEECG-P3开发专题 - 开发环境搭建入门
  8. 自动化集成:Kubernetes容器引擎详解
  9. SpringBoot2 集成测试组件,七种测试手段对比
  10. SpringBoot2.0基础案例(01):环境搭建和RestFul风格接口