在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=100
#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变量。
分享到:
相关推荐
`2.2Shell变量的作用域:全局变量、环境变量和局部变量.html`将讲解变量的不同类型及其作用域,包括全局变量(在整个脚本中可见)、环境变量(可供所有子进程使用)和局部变量(仅在其定义的函数或块中有效)。...
在Shell编程中,变量的作用域是一个关键概念,它决定了变量在哪些范围内可以被访问。Shell中的变量主要有三种作用域:局部作用域、全局作用域...通过合理利用变量作用域,你可以更好地组织和控制你的Shell脚本的逻辑。
说起函数调用,相信大家也不会陌生,然而对于初学Shell的我来说,Shell中函数调用方式却有点让我不太习惯,自己也走了不少的弯路,因为传递参数时出了一个很“自然”的错误,也让我吃了不少的苦头,所以总结一下...
* shell 函数变量的作用域:函数中的变量可以在局部和全局中使用。 5. Linux Shell 脚本编程实践 Linux Shell 脚本编程可以应用于各种场景,例如系统管理、网络管理、数据处理等。 * 自动化系统管理:使用 shell ...
在Shell脚本中,了解函数的作用域和变量的作用范围非常重要,这直接影响到函数内部和外部变量的行为。 **示例代码** (testfun2.sh): ```sh #!/bin/sh echo $(uname); declare num=1000; uname() { echo "test!"; ...
4. 函数编写:掌握如何在Shell脚本中定义和调用函数,以及参数传递和局部变量的作用域。 5. 脚本调试和测试:学习使用调试工具和方法对脚本进行错误检测和问题诊断,以及如何编写测试用例确保脚本的稳定性和可靠性...
- **变量**:Shell脚本中可以定义并使用变量,例如`NAME="John"`,然后通过`echo $NAME`输出变量值。 - **流程控制**:包括条件语句(如`if`,`elif`,`else`)和循环语句(如`for`,`while`,`until`)。 2. **...
函数内部可以使用`local`关键字定义只在函数内部作用域有效的变量。 2. **退出状态**: 函数执行完毕后会返回一个退出状态,这个值可以通过`return`命令指定,范围是0到255,其中0表示成功,非0表示错误。如果没有...
编写Shell脚本的过程中还需要注意特殊字符的使用,比如$()用于命令替换,{}用于限定变量的作用域,[]用于测试条件表达式,而 [[]]则用于更高级的条件测试。 最后,脚本编写完成之后,建议通过实际的例程、习题实训...
本文将深入讲解Linux shell脚本的几个核心知识点,包括Shebang、变量、作用域、特殊参数变量、状态变量、内置命令、字符串操作以及文件管理。 首先,Shebang(#!/bin/bash)是shell脚本的第一行,它指定了脚本应...
默认情况下,变量在整个脚本中都是可见的,但也可以限制其作用域仅限于某个函数内部。 3. **掌握Shell通配符的用法**: - **通配符**:`*` 表示任意数量的任意字符;`?` 表示单个任意字符;`[` 和 `]` 定义一组...
- **从shell中访问描述符**:演示了如何在Shell脚本中访问和操作文件描述符。 #### 第10章 管道输入读 - **逐行选项1**至**逐行选项4**:提供了四种不同的方法来逐行读取管道输入。 - **直接管道读**:直接从管道...
数也能像环境变量一样用export到处,如此,函数的作用域就可以扩展到子进程中。 export -f fname Linux export命令用于设置或显示环境变量。 在shell中执行程序时,shell会提供一组环境变量。export可新增,修改...
在后续章节中,将详细介绍如何声明、赋值和使用变量,以及变量的作用域和生命周期。理解变量是编写有效脚本的关键,因为它们可以存储数据并在脚本的不同部分之间传递信息。 **控制流** 条件语句(如if、else、case...
函数与数组章节介绍了Shell函数的定义、调用和作用域。数组作为数据集合,在Shell脚本中同样可以使用,包括创建、索引、追加和删除元素等操作。 文本处理在Shell脚本中占有重要地位,通常涉及grep、sed和awk这三个...
Shell脚本是Linux/Unix操作系统中用于自动化任务的编程语言,它基于Bash shell,是系统管理员和开发者常用的工具之一。以下是对常用Shell工作脚本的一些重点总结: 1. 批量创建文件: - 在 `/shi` 目录下批量创建...
Shell变量是Shell脚本编程中的基础元素,用于存储各种数据。在Bash Shell中,变量的定义无需指定类型,它们默认被当作字符串处理,这意味着无论赋予变量的是整数、浮点数还是其他类型,都会被当作字符串存储。这与C/...
在Linux系统中进行日常运维或者是编写脚本时,变量是再熟悉不过的了,但这些变量都有哪些类型,具体的用法又有哪些差异呢?本文整理分享给大家: 一、bash变量类型: 本地变量 局部变量 环境变量 位置变量 特殊变量...
总结来说,Linux Shell的自定义函数为我们提供了模块化和复用代码的能力,通过理解函数定义、返回值处理以及变量作用域,可以更高效地编写Shell脚本。记得在编写函数时,考虑函数的可读性和可维护性,同时注意变量的...