自学Linux Shell16.2-函数中使用变量
16.2-函数中使用变量
1. 向函数传递参数
- 函数可以使用标准参数环境变量来表示命令行传递给函数的参数。例如,
函数名在变量$0中定义,函数命令行的其他参数使用变量$1和$2等定义。
专用变量$#可以用来确定传递给函数的参数数目。 - 在脚本中指定函数时,必须在函数所在命令行提供参数值。func1 $value1 10
- 由于函数为自己的参数值使用专用的参数环境变量,所以函数无法从脚本命令行直接访问脚本参数值。

以上含义:函数addem首先检查传递给它的参数数目。
- 如果没有任何参数,或者参数数目超过两个,那么返回值为-1。
- 如果只有一个参数,那么这个参数与自己相加作为结果。
- 如果有两个参数,那么两个参数相加作为结果。
2. 在函数中处理变量
变量作用域是shell脚本程序员遇到的常见问题。作用域是变量的可见区域。函数内定义的变量与普通变量有不同的作用域,前者能被脚本外部定义的变量所覆盖。
函数使用两种类型的变量:
- 全局变量
- 局部变量
2.1 全局变量
全局变量是在shell脚本中处处有效的变量。同样,如果在函数内部定义了全局变量,那么脚本的主代码也可以获取该变量的值。
默认情况下,脚本中定义的变量都是全局变量。在函数外部定义的变量,在函数内部仍能正常访问。

变量temp已经在函数内部使用,而又在函数外部赋值,所以生成的结果会出人意料。全局变量保存最后一次运算结果的值。
2.2 局部变量
- 函数内部使用的变量可以称为局部变量。这只需要在变量声明前加上关键字:local temp。
- 也可以给局部变量赋值语句前加上local关键字:local temp=$[ $value +5 ]。
- 关键字local确保变量仅在函数内部使用。如果脚本在函数外部有同名变量,那么shell将能区分开这两个变量。可以很容易地将函数变量与脚本变量区分开来,而只共享需要的变量。

......
自学Linux Shell16.2-函数中使用变量的更多相关文章
- 函数中声明变量不用Var的情况
我们都知道函数中声明变量不用Var时这个变量会成为全局变量,但是并不是函数一开始执行就会把它变为全局变量,必须执行到这条语句. 看一段代码 function f(){ alert(a); ...
- django变量使用-在模板中使用视图函数中的变量
DTL语言,即django template language 第一次使用时,需要修改项目的setting.py文件,将其中TEMPLATES中的DIRS修改为os.path.join(BASE_DI ...
- OpenCV-Python setMouseCallback回调函数中图像变量img的传递方法解析
☞ ░ 前往老猿Python博文目录 ░ 一.使用全局变量进行变量传递 OpenCV-Python中可以使用setMouseCallback来设置鼠标事件的回调函数,我们来看个样例. 1.1.案例1代 ...
- 第5.4节 Python函数中的变量及作用域
一.函数中的变量使用规则 函数执行时,使用的全局空间是调用方的全局空间,参数及函数使用的局部变量存储在函数单独的局部名字空间内: 函数的形参在函数中修改了值时,并不影响调用方本身的数据,但如果形参是一 ...
- 自学Linux Shell16.4-在命令行上使用函数
点击返回 自学Linux命令行与Shell脚本之路 16.4-在命令行上使用函数 脚本函数不仅可以用作shell脚本命令,也可以用作命令行界面的命令.一旦在shell中定义了函数,可以从系统的任意目录 ...
- 自学Linux Shell16.1-函数概念
点击返回 自学Linux命令行与Shell脚本之路 16.1-函数概念 编写比较复杂的shell脚本时,完成具体任务的代码可能需要重复使用.bash shell提供满足这种要求的特性.函数是被赋予名称 ...
- 自学Linux Shell16.3-函数递归+创建库
点击返回 自学Linux命令行与Shell脚本之路 16.3-函数递归+创建库 1. 函数递归 递归调用函数是指函数调用自身进行求解. 通常,递归函数有基值,函数最终递推到达该值. 许多高级数学算法使 ...
- 自学Linux Shell6.2-用户自定义环境变量
点击返回 自学Linux命令行与Shell脚本之路 6.2-用户自定义环境变量 1.设置局部用户定义变量 一旦启动bash shell(或者执行一个shell脚本),你就能创建这个shell进程可见的 ...
- c++ 类与函数中static变量初始化问题(转)
首先static变量只有一次初始化,不管在类中还是在函数中..有这样一个函数: void Foo() { ; // initialize std::cout << a; a++; } 里的 ...
随机推荐
- Luogu3825 NOI2017 游戏 2-SAT
传送门 第一眼看上去似乎是一个3-SAT问题 然而\(d \leq 8\)给我们的信息就是:暴力枚举 枚举\(x\)型地图变成\(a\)型地图还是\(b\)型地图(实际上不要枚举\(c\),因为\(a ...
- UVA10720 Graph Construction 度序列可图性
Luogu传送门(UVA常年上不去) 题意:求一个度序列是否可变换为一个简单图.$\text{序列长度} \leq 10000$ 题目看起来很简单,但是还是有一些小细节需要注意首先一个简单的结论:一张 ...
- LiveCharts文档-2FAQ
原文:LiveCharts文档-2FAQ LiveCharts文档-2FAQ 原文链接 LiveCharts基于的平台有WPF,UWP,WinForms:语言是C#, FAQ: 我怎么转换一个char ...
- wpf项目打开多个窗体在任务栏只有一个任务
原文:wpf项目打开多个窗体在任务栏只有一个任务 如果在wpf里,在一个父窗体上打开子窗体,只在任务栏显示一个任务,不是qq聊天窗口俩人聊天人显示俩给那样,只能显示 一个 private void B ...
- BootStrap学习(7)_轮播图
一.轮播图 Bootstrap 轮播(Carousel)插件是一种灵活的响应式的向站点添加滑块的方式.除此之外,内容也是足够灵活的,可以是图像.内嵌框架.视频或者其他您想要放置的任何类型的内容. 如果 ...
- phpstorm 2018.1.2的安装和破解
1.什么是phpstorm? PhpStorm是一个轻量级且便捷的PHP IDE,其旨在提高用户效率,可深刻理解用户的编码,提供智能代码补全,快速导航以及即时错误检查.但是phpstorm是商业软件, ...
- MPI-Hydra Process Managerment Framework
1. 概述2. 执行过程和控制流 官方文档地址:https://wiki.mpich.org/mpich/index.php/Hydra_Process_Management_Framework 1. ...
- ProxySQL实现Mysql读写分离 - 部署手册
ProxySQL是一个高性能的MySQL中间件,拥有强大的规则引擎.ProxySQL是用C++语言开发的,也是percona推的一款中间件,虽然也是一个轻量级产品,但性能很好(据测试,能处理千亿级的数 ...
- Centos下PPTP环境部署记录
PPTP(点到点隧道协议)是一种用于让远程用户拨号连接到本地的ISP,通过因特网安全远程访问公司资源的新型技术.它能将PPP(点到点协议)帧封装成IP数据包,以便能够在基于IP的互联网上进行传输.PP ...
- 安装Visual Studio 2013以及简单使用
首先,在网上找到安装Visual Studio 2013的教程以及相关软件资源http://jingyan.baidu.com/article/09ea3ede3b2496c0afde3944.htm ...