[转]Shell中脚本变量和函数变量的作用域
(1)Shell脚本中定义的变量是global的,其作用域从被定义的地方开始,到shell结束或被显示删除的地方为止。
例1:脚本变量的作用域
#!/bin/bash
#define the function ltx_func
ltx_func()
{
echo $v1
#modify the variable v1
v1=200
}
#define the variable v1
v1=100
#call the function ltx_func
ltx_func
echo $v1
结果:
100
200
解析:脚本变量v1的作用域从被定义的地方开始,到shell结束。调用函数ltx_func的地方在变量v1的作用域内,所以能够访问并修改变量v1。
(2)Shell函数定义的变量默认是global的,其作用域从“函数被调用时执行变量定义的地方”开始,到shell结束或被显示删除处为止。函数定义的变量可以被显示定义成local的,其作用域局限于函数内。但请注意,函数的参数是local的。
例2:函数定义的global变量
#!/bin/bash
#define the function ltx_func
ltx_func()
{
#define the variable v2
v2=200
}
#call the function ltx_func
ltx_func
echo $v2
结果:
200
解析:函数变量v2默认是global的,其作用域从“函数被调用时执行变量定义的地方”开始,到shell结束为止。注意,不是从定义函数的地方开始,而是从调用函数的地方开始。打印命令在变量v2的作用域内,所以能够访问变量v2。
例3:函数定义的local变量
#!/bin/bash
#define the function ltx_func
ltx_func()
{
#define the local variable v2
local v2=200
}
#call the function ltx_func
ltx_func
echo $v2
结果:
(空)
解析:函数变量v2显示定义为local的,其作用域局限于函数内。打印命令在函数外,不在变量v2的作用域内,所以能够不能访问变量v2。
例4:函数参数是local变量
#!/bin/bash
#define the function ltx_func
ltx_func()
{
echo "param 1: $1"
}
#call the function ltx_func
ltx_func 100
结果:
100
解析:函数参数是local的,通过位置变量来访问。打印命令输出函数的第一个参数。
(3)如果同名,Shell函数定义的local变量会屏蔽脚本定义的global变量。
例5:同名local变量屏蔽global变量
#!/bin/bash
#define the function ltx_func
ltx_func()
{
echo $v1
#define the local variable v1
local v1=200
echo $v1
}
#define the global variable v1
v1=200
#call the function ltx_func
ltx_func
echo $v1
结果:
100
200
100
解析:global变量v1的作用域从被定义的地方开始,到shell结束。调用函数ltx_func的地方在变量v1的作用域内,所以能够变量v1。函数又定义了同名的local变量v1,同名local变量屏蔽global变量,所以函数第二次打印访问的是local变量。退出函数后再次打印v1,此时函数定义的local变量已经消失,访问的是global变量。
[转]Shell中脚本变量和函数变量的作用域相关推荐
- PHP: 在类(class)中加载动态函数, 变量函数或半变量函数 variable function/method
最终实例在下方 以前用过cakephp, 他们的数据库查询还是蛮强大的, 后来好奇它的类的写法,比如: <?php $this->Post->findByTitle('My Firs ...
- sh执行文件 参数传递_详解shell中脚本参数传递的两种方式
方式一:$0,$1,$2.. 采用$0,$1,$2..等方式获取脚本命令行传入的参数,值得注意的是,$0获取到的是脚本路径以及脚本名,后面按顺序获取参数,当参数超过10个时(包括10个),需要使用${ ...
- while读取文件 Shell中while循环的陷阱, 变量实效, 无法赋值变量
在写while循环的时候,发现了一个问题,在while循环内部对变量赋值.定义变量.数组定义等等环境,在循环外面失效. 一个简单的测试脚本如下: #!/bin/bash echo "abc ...
- shell中的命令替换和变量替换
一.命令替换 可以用'command', 也可以用$(command). 二者是有区别的,先看一下'command'(注意:这里不是引号,而反引号) 1. `command' 用来做命令替换 2. $ ...
- SHELL中的引用之引用变量
引号的特殊效果就是,保护字符串中的特殊字符不被shell 或者是shell 脚本重新解释或者扩展. (这里所说的"特殊"指的是一些字符在shell 中具有的特殊意义,比如*) 在我 ...
- matlab 报错 保留变量,matlab中明明定义了函数变量总是报错
matlab定义符号函数 functiony=ff(t)t=input('t=');ift>=0y=sym('1');elsey=sym('0');end matlab中如何定义函数 matla ...
- 变量在函数内外的作用域 3
<?phpfunction increment($value,$amount = 1) { $value = $value +$amount; }$value = 10; increment ( ...
- 子shell中使用相关的环境变量
- Shell中常用的系统函数basename和dirname
shell编程和其他编程语言一样,有系统函数,也可以自定义函数. basename命令 basename功能: 返回完整路径最后/的部分,常用于获取文件名basename [pathname][suf ...
最新文章
- linux下常用命令之nc
- 机甲才是男人的浪漫 这款Python版免费战争机甲类游戏,“白拿党”还在等什么?(超帅气)
- python安装环境安装_安装Python运行环境
- 在华为鸿蒙OS上尝鲜,我的第一个“hello world”
- [剑指offer][JAVA]面试题第[15]题[二进制中1的个数][位运算]
- androidpn的一次亲密接触(二)
- 无人机-2多翼无人机的结构与硬件
- 王珊数据库系统概论第五版视频课程
- 台式计算机开关电源原理图,开关电源电路原理(附原理图)
- PS全套抠图技法教程,快速抠头发/抠婚纱,带配套素材
- python当行刷新
- 常见的几个接口管理平台简介
- Matlab/simulink 风电风机一次调频,变桨控制,变风速调频对比,转子动能控制,虚拟惯性控制,风机内部控制详细,频域模型,DFIG,PMSG
- 2020腾讯、百度、华为Android面试题校招汇总(已拿offer
- 自控原理学习笔记-反馈控制系统的动态模型(4)-频率特性函数Nyquist图及Bode图
- IT硬件名人堂:40年经典产品和背后的故事(组图)
- php 蓝奏网盘上传文件,教给大家一个蓝奏云高级玩法,如何把文件一键秒上传到蓝奏云网盘...
- EVE-NG配置静态固定地址
- 更换网站服务器对网站优化有影响吗?
- 【超简单实用教程】mkv、flv格式转mp4格式(附网盘资源)