在shell脚本中定义函数时,曾被局部变量,全局变量搞的头昏脑胀的。于是就写了两个脚本尝试了一下。首先看第一个例子
#!/bin/bash
function test() {
echo "d_o_f:" $d_o_f
d_i_f="defined in function"
d_o_f="modified in function"
echo "d_i_f:" $d_i_f
echo "d_o_f:" $d_o_f
}
echo "---out fucntion---"
d_o_f="defined out function"
echo "d_o_f:" $d_o_f
echo "---in function---"
test
echo "---out function---"
echo "d_i_f:" $d_i_f
echo "d_o_f:" $d_o_f
输出结果为:
---out fucntion---
d_o_f: defined out function
---in function---
d_o_f: defined out function
d_i_f: defined in function
d_o_f: modified in function
---out function---
d_i_f: defined in function
d_o_f: modified in function
由上面的输出可以看出,
1、函数内是可以访问全局变量,并且对全局变量的修改会真正改变全局变量的值。
2、函数内定义的变量也是全局变量,也就是说函数外可以访问。
接着我们修改一下代码:
#!/bin/bash
function test() {
local d_o_f
local d_i_f
echo "d_o_f:" $d_o_f
d_i_f="defined in function"
d_o_f="modified in function"
echo "d_i_f:" $d_i_f
echo "d_o_f:" $d_o_f
}
echo "---out fucntion---"
d_o_f="defined out function"
echo "d_o_f:" $d_o_f
echo "---in function---"
test
echo "---out function---"
echo "d_i_f:" $d_i_f
echo "d_o_f:" $d_o_f
其输出结果为:
---out fucntion---
d_o_f: defined out function
---in function---
d_o_f:
d_i_f: defined in function
d_o_f: modified in function
---out function---
d_i_f:
d_o_f: defined out function
从结果中可以看出关键词local起作用了。
1、对一个与全局变量同名的局部变量修改不会影响全局变量的值。
2、在函数外不能访问一个局部变量。
分享到:
相关推荐
3. **全局变量与局部变量**: - **全局变量**: 如果在函数外部定义了一个变量,那么这个变量在函数内部可以直接访问并修改。如上例中的 `num`。 - **局部变量**: 使用 `local` 关键字定义的变量只在该函数内部有效...
5. **全局变量与局部变量** 默认情况下,函数内外的变量都是全局变量,可以在整个脚本范围内被访问。但当在函数内部修改全局变量时,会影响脚本的其他部分。例如,`variable.sh`脚本中的`temp`变量在函数`fun3`内被...
如果希望变量在整个脚本中可用,需要使用`export`命令将其声明为全局变量。 ### 7. 函数的高级应用 - **匿名函数**:在bash中,可以通过`()`直接创建一个匿名函数,但无法为它命名,通常用于一次性使用。 - **...
- **局部变量**:只在当前脚本或函数内部有效的变量。 - **全局变量**:在整个脚本范围内都有效的变量。 ##### 3.1 环境变量 - **设置**: ```sh export VARIABLE_NAME=value ``` - **示例**: ```sh export ...
普通变量则是局部变量,仅在定义它们的Shell函数或脚本中有效。环境变量需要通过export命令进行导出,使得子进程可以访问。例如,将自定义环境变量NINGJIANCHENG赋值为1的操作是“export NINGJIANCHENG=1”。环境...
局部变量只在当前Shell会话或函数内有效。 ### 六、Shell命令与变量 许多Shell命令可以与变量一起使用,例如`echo`用于打印变量的值,`read`可以从用户输入读取值赋给变量,`printf`提供了更灵活的格式化输出。...
局部变量可以让程序员使用已经存在的变量名称,无论是脚本中的全局变量,还是其他 shell 函数中的变量,而不用考虑潜在的命名冲突。 七、IF 控制语句 IF 控制语句的语法格式为: ```bash if commands; then ...
函数的返回值通过`return`语句设定,局部变量仅在函数内部有效,全局变量在整个脚本范围内可见。 **find命令**: `find`用于在文件系统中搜索文件,如`find /path -name "filename"`。`locate`命令基于数据库快速...
1,shell 是大小写敏感的,空格敏感的! a!=A a=1(正确)a = 1(错误) 2,清屏命令 clear ?3,declare -x variable 设置环境变量 ...【except:函数的参数是局部变量】 局部变量的自定义: local va=1定义局部变量,
`2.2Shell变量的作用域:全局变量、环境变量和局部变量.html`将讲解变量的不同类型及其作用域,包括全局变量(在整个脚本中可见)、环境变量(可供所有子进程使用)和局部变量(仅在其定义的函数或块中有效)。...
用户可以通过设置自定义变量来存储临时数据,而环境变量则是操作系统为用户会话设置的全局变量。 2. **掌握Shell变量的用法**: - **声明与赋值**:使用等号(=)进行赋值,例如 `x=5` 或 `name="John Doe"`。 - ...
* shell 函数变量的作用域:函数中的变量可以在局部和全局中使用。 5. Linux Shell 脚本编程实践 Linux Shell 脚本编程可以应用于各种场景,例如系统管理、网络管理、数据处理等。 * 自动化系统管理:使用 shell ...
局部变量只能在当前 shell 进程中使用,不能被子进程继承。 ```sh #LOCALTEST="test" #echo${LOCALTEST} test #echo$LOCALTEST test ``` #### 变量扩展 变量扩展是 shell 中非常重要的一个概念,它可以让我们以不同...
2. 全局作用域:在脚本的顶级(非函数内)定义的变量具有全局作用域,可以在整个脚本中被访问,除非被局部变量覆盖。如果在脚本的开头定义了一个变量,那么这个变量在整个脚本中都是可见的。 3. 环境作用域:通过`...
变量分为局部变量(仅在定义它的函数内部可见)和全局变量(在整个脚本中都可访问)。环境变量是所有子进程都可以访问的全局变量,而系统变量则由shell本身维护。 在P6-P8部分,讲解了变量的详细内容,包括如何声明...
- **定义和调用Shell函数**:通过`function`关键字或直接使用函数名定义,通过函数名调用。 - **函数参数**:函数可以接收参数,类似于位置参数。 6. **输入/输出重定向** - **标准输入(stdin)、标准输出...
- **普通变量(局部变量)**:只在创建它们的shell函数或脚本中有效。普通变量可以用来存储临时数据或在脚本内使用的特定值。 - **特殊位置参数变量**:如`$1`, `$2`, ..., `$9`, `${10}`, `$#`。其中`$1`, `$2`, .....
Shell 函数中的变量默认是全局的,除非使用 `local` 关键字声明为局部变量。这意味着如果不加声明,函数内部对变量的修改会影响到函数外部。 ```bash function foo() { var="bar" # 全局变量 local localVar=...
2. **局部变量**:在函数内部使用`local`关键字定义的变量是局部变量,仅在函数内部有效,不会影响函数外部同名变量的值: ```bash testvar() { local num=10 ((num++)) echo $num } testvar echo $num # 输出...
1. 定义和调用Shell函数,理解局部变量和全局变量的概念。 2. 函数返回值:如何设置和获取函数的返回状态。 四、Shell脚本编写 1. 脚本结构:理解脚本的头部声明,如#!/bin/bash,以及注释的使用。 2. 变量赋值与...