📜  批处理脚本 – 本地 VS 全局变量

📅  最后修改于: 2022-05-13 01:57:26.686000             🧑  作者: Mango

批处理脚本 – 本地 VS 全局变量

在本文中,我们将看到 bash 脚本中局部变量和全局变量之间的区别。

变量:用于在程序中存储值的内存位置的名称称为变量。它存储可以在程序中任何需要的地方调用和操作的信息。

范围:程序的部分或范围,其中变量可访问或被认为是活动的。

根据变量的范围,它有两种类型:

局部变量:作用域在声明它的函数内的那些变量(可以在程序中声明的块或函数内访问)

全局变量:这些变量可以在整个程序中全局访问。

本地 VS 全局变量:

Local variableGlobal variable
The ‘local’ keyword is used to declare the local variable.No keyword is used.
It is declared inside the functionIt can be declared outside the function anywhere in the program.
It doesn’t prove the data sharingIt provides data sharing
These are stored on the stackThese variables are stored in the fixed memory location by the compiler.
Parameters passing is necessaryParameters passing is not necessary
Garbage value is stored if not initialized.Zero is stored by default if not initialized.
If modified inside one function that modification will not get reflected in other function.If modified in one function that modification will be visible in whole program.

使用局部变量的优点

  • 它确保变量的值在任务运行时保持不变。
  • 在多任务环境中,每个任务都可以更改变量的值。它不会产生不良结果,因为每个任务都可以创建自己的局部变量实例。
  • 相同的变量名可以用于不同的任务。
  • 它一执行就释放内存。

使用局部变量的缺点

  • 它使调试成为一个复杂的过程。
  • 由于模块间数据共享的限制,公共数据需要反复传递。
  • 它们的范围非常有限。

使用全局变量的优点

  • 它可以从程序的所有功能或模块中访问。
  • 只需要在模块外声明一次全局变量。
  • 它用于存储常量值以保持一致性。
  • 当许多函数可以访问相同的数据时,它很有用。

使用全局变量的缺点

  • 在程序内部声明的所有全局变量都保留在内存中,直到执行完成。这可能会导致内存不足问题。
  • 数据修改很容易,任何任务或函数都可以轻松修改。这会在多任务环境中产生不良结果。
  • 由于重构而中断全局变量将导致更改所有关联模块的问题。

让我们看一些例子来更好地理解全局变量和局部变量。

函数

该函数是可以多次调用的命令集。它用于避免一次又一次地编写相同的代码块。

句法:

function_name () {
 commands
}
OR
function function_name {
  commands
}

两种编写函数的格式在 bash 脚本中都是正确的。

示例 1:创建局部变量

局部变量在变量名前使用关键字声明

#!/bin/bash
function first () {
  local x="HelloNew"
 echo "Inside first function x=$x"
 
}

first
echo "Outside first function x = $x"

输出:

Inside first function x=HelloNew
Outside first function x = 

示例 2:创建全局变量

#!/bin/bash
function first () {
 x="Hello Geek"
 echo "Inside first function x= $x"
 
}

first
echo "Outside first function x = $x"

输出:

Inside first function x=Hello Geek
Outside first function x = Hello Geek

示例 3:程序中的多个局部和全局变量

#!/bin/bash
function first () {
 local x="Hello Geek"
 local y= "Enjoy"
 echo "Inside first function x= $x"
 echo "Inside first function y= $y"
 
}
x="Hello Romy"
y="good to see you!"
first
echo "Outside first function x = $x"
echo "Outside first function y= $y"

输出:

Inside first function x= Hello Geek
Inside first function y=  
Outside first function x = Hello Romy
Outside first function y= good to see you!

变量的覆盖

请参见下面的示例:

#!/bin/bash
x="Hellooooo!!"
echo " Outside first function x =$x"
function first () {
 x="Hello Geek"

}

first
echo "After overwriting, x = $x"

输出:

Outside first function x =Hellooooo!!
After overwriting, x = Hello Geek

从示例中,我们可以看到 x 的值被覆盖。为了防止变量被覆盖,我们可以通过在变量声明之前写'declare -r'来使我们的变量只读。

例子:

#!/bin/bash
x="Hellooooo!!"
echo " Outside first function x =$x"
function first () {
 declare -r x="Hello Geek"
}

first
echo "After overwriting, x = $x"

输出:

Outside first function x =Hellooooo!!
After overwriting, x = Hellooooo!!