小鸟初学Shell编程(七)变量引用及作用范围
微信公众号:「小林coding」
用简洁的方式,分享编程小知识。
变量引用
那么定义好变量,如何打印变量的值呢?举例下变量引用的方式。
${变量名}称作为对变量的引用echo ${变量名}查看变量的值${变量名}在部分情况下可以省略成$变量名
[root@lincoding ~]# string="hello Shell"
[root@lincoding ~]# echo ${string}
hello Shell
[root@lincoding ~]# echo $string
hello Shell
那么有花括号括起来的变量和没有花括号的区别是什么呢?
[root@lincoding ~]# echo $string9
[root@lincoding ~]# echo ${string}9
hello Shell9
可以发现在引用string变量后加了个9,没有加花括号的引用,会把string9当做一个变量名,有加花括号的引用,则在打印string变量后,尾部多增加一个9
变量的默认作用范围
我们通过定义的变量只会在当前的Shell环境生效,当切换成另外一个Shell的时候,之前定义好的变量是不生效的
我们在Shell脚本里定义了一个变量str
#!/bin/bash
str="my shell"
echo ${str}
执行Shell脚本的时候,会打印在Shell脚本定义的变量的值。当前终端引用了Shell脚本的变量,打印了空值。
[root@lincoding ~]# ./test.sh
my shell
[root@lincoding ~]# echo ${str}
[root@lincoding ~]#
说明变量str作用范围只在Shell脚本里。
如果在终端定义个一变量,Shell脚本里引用该变量会生效吗?
[root@lincoding ~]# mystr="abc"
[root@lincoding ~]# cat test.sh
#!/bin/bash
echo ${mystr}
[root@lincoding ~]# ./test.sh
[root@lincoding ~]# bash test.sh
[root@lincoding ~]# . test.sh
abc
[root@lincoding ~]# source test.sh
abc
上面分别使用了四种执行方式运行脚本,这四种执行方式的影响也在前面章节详细说明过。
方式一和方式二,是会产生子进程来执行脚本,由于当前终端定义的变量作用范围只在当前的终端,所以子进程引用于父进程定义的变量是不生效的。
方式三和方式四,是不会产生子进程,而是直接在当前终端环境执行脚本,所以也在变量的作用范围内,所以引用了变量是生效的。
export导出变量
假设想让父进程定义的变量在子进程或子Shell也同时生效的话,那么需要用export将变量导出,使用的具体方式如下例子:
[root@lincoding ~]# mystr="abc"
[root@lincoding ~]# bash test.sh
[root@lincoding ~]# export mystr
[root@lincoding ~]# bash test.sh
abc
[root@lincoding ~]# ./test.sh
abc
可见在使用export后,终端定义的变量,test.sh脚本里引用了该变量是生效的。也就说子进程可以获取父进程定义的变量的值。
如果用完了该变量,想把变量清空,则可以使用unset
[root@lincoding ~]# unset mystr
[root@lincoding ~]# echo ${mystr}
[root@lincoding ~]#
小结
变量默认的作用范围是Shell的自身,如果想为子Shell或子进程来使用父进程的变量,我们需要用export 变量名关键词进行导出变量,如果不再使用该变量,要及时使用unset 变量名来清空变量的值。
小鸟初学Shell编程(七)变量引用及作用范围的更多相关文章
- 小鸟初学Shell编程(六)变量赋值
变量的意义 我们在使用Linux命令或脚本的时候,会有一些输出,那么这些输出的信息可以用变量临时存储,以备我们下一条命令或脚本使用. 变量的定义 变量的定义建议用一个有意义的英文单词来代表变量,不要使 ...
- 小鸟初学Shell编程(四)管道符
管道作用 管道实际上就是进程之间的一个通信工具,那么用在Linux命令中主要是方便两条命令互相之间可以相互通信. 管道符 管道符(匿名管道)是Shell编程经常用到的通信工具. 管道符是"| ...
- 小鸟初学Shell编程(一)认识Shell
开篇介绍 Linux里非常的有用的一个功能,这个功能就叫Shell脚本. Shell脚本在我日常开发工作里也占了非常重要的角色,项目中一些简单的工作我们都可以使用Shell脚本来完成,比如定时删除日志 ...
- 小鸟初学Shell编程(八)环境变量、预定义变量与位置变量
环境变量 环境变量:每个Shell打开都可以获得到的变量. 我们知道通过export的方式打开可以让子进程读取父进程的变量的值,那怎么样才能让每一个进程都能读取到变量的值呢? 在这呢,系统有一些默认的 ...
- 小鸟初学Shell编程(九)环境变量变量配置文件
介绍 在上一篇使用完了环境变量,并且知道PATH环境变量概念,那么我们对命令的执行就有了一定深入的理解.那么PATH环境变量或其他环境变量是保存在哪呢?那么这篇文章主要介绍环境变量配置文件. 配置文件 ...
- 小鸟初学Shell编程(五)输入输出重定向
重定向作用 一个进程默认会打开标准输入.标准输出.错误输出三个文件描述符. 重定向可以让我们的程序的标准输出.错误输出的信息重定向文件里,那么这里还可以将文件的内容代替键盘作为一种标准输入的方式. 重 ...
- 小鸟初学Shell编程(三)脚本不同执行方式的影响
执行命令的方式 执行Shell脚本的方式通常有以下四种 方式一:bash ./test.sh 方式二:./test.sh 方式三:source ./test.sh 方式四:. ./test.sh 执行 ...
- 小鸟初学Shell编程(二)编写简单的Shell脚本
Shell脚本 编写Python.PHP脚本通常需要掌握语言的函数,那么Shell脚本则不需要,只需要掌握Linux命令就可以编写Shell脚本,因为Shell脚本就是由多个Linux命令组成,通过将 ...
- Linux学习——shell编程之变量
shell编程之变量:Linux shell编程基础中的变量. 包括Bash变量的分类和各变量的详细使用,如:用户自定义变量.环境变量.语系变量.位置参数变量和预定义变量. 1:什么是Bash变量? ...
随机推荐
- Codeforces 976D
题意略. 思路:构造题. 我们把全部的d[n]+1个点分作3部分来构造. 首先我们把原问题归约成构造d1.dn.和{d2 - d1,d3 - d1,.....,d[n-1] - d1}这样的问题,其中 ...
- Leetcode之回溯法专题-51. N皇后(N-Queens)
Leetcode之回溯法专题-51. N皇后(N-Queens) n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击. 上图为 8 皇后问题的一种解法. 给 ...
- Fire Balls 05——坦克和子弹的制作以及炮台发射子弹
版权申明: 本文原创首发于以下网站: 博客园『优梦创客』的空间:https://www.cnblogs.com/raymondking123 优梦创客的官方博客:https://91make.top ...
- Docker swarm 获取service的container信息
我们可以通过docker service create创建服务,例如: docker service create --name mysql mysql:latest 服务创建好后,如何来获取该ser ...
- 用户数从 0 到亿,我的 K8s 踩坑血泪史
作者 | 平名 阿里服务端开发技术专家 导读:容器服务 Kubernetes 是目前炙手可热的云原生基础设施,作者过去一年上线了一个用户数极速增长的应用:该应用一个月内日活用户从零至四千万,用户数从零 ...
- Python 命令行之旅:使用 argparse 实现 git 命令
作者:HelloGitHub-Prodesire HelloGitHub 的<讲解开源项目>系列,项目地址:https://github.com/HelloGitHub-Team/Arti ...
- Atcoder D - A or...or B Problem(思维)
题目链接:http://agc015.contest.atcoder.jp/tasks/agc015_d 题意:给出两个数b,a(a>=b)问{a,a+1,....,b}的集合内取任意数求或运算 ...
- mapper文件中“添加一条新数据并返回此数据的ID(主键)”的方法
在mapper文件的insert语句前加上<selectKey>标签即可 如下: 添加前测试: 添加后测试:
- 前端-HTML-web服务本质-HTTP协议-请求-标签-01(待完善)
目录 前端 什么是前端 什么是后端 学习流程 前端三剑客的形容 web服务的本质 测试--浏览器作为客户端向服务器发起请求 浏览器输入网址回车发生了几件事 ***** HTTP协议(超文本传输协议) ...
- JS枚举对象属性的方法及其区别
愉快的中秋节要过去了,国庆倒计时两个周!!! 闲话不多说,那今天我们来看一看JS中枚举对象属性的方法有哪些以及他们的区别 首先在JS里面枚举对象属性一共有三种方法 for in: 会遍历对象中所有的可 ...
