Bash 变量作用域
在本文中,我们将了解 Linux 中的 bash 变量作用域。 我们还学习了如何在 Linux 操作系统的 bash 脚本中声明变量。
此外,我们将看到不同类型的变量以及如何使用 Linux 操作系统在 bash 脚本中访问局部和全局变量。 让我们从 Linux 中使用的变量概念开始。
Linux 中的 Bash 变量作用域
变量是在任何编程语言中处理的各种数据类型的临时存储空间。 一个变量通常与两个独立的实体相关:数据类型及其值。
数据类型描述保存在变量中的数据,而值代表数据本身。 在 Bash 编程中声明变量时,我们不需要显式指定数据类型。
这是因为编程语言本身会检测数据类型。 例如,在 bash 中,如果我们将一个数字分配给一个变量,它会立即被视为一个整数。
如何在 Bash 中声明变量
在 bash 中,我们可以使用等号“=”声明一个任意名称的变量,并使用我们想要分配的值。 以下是我们在 bash 中声明变量时可以遵循的一些规则:
- 大小写字母、数字、下划线和小数都是变量名可接受的字符。
- 建议在 Bash 脚本中使用大写字母作为变量名。
- 不要在等号“=”两边留出空格。
- 所有预定义关键字都受到限制,例如 if、else、local 等。
下面是在 bash 中声明一个 String 变量的例子。 我们打开终端并声明变量。 不要忘记,在声明变量时,我们不允许在等号 ('=') 周围放置任何空格。
$ _name=abid
我们使用 echo
来获取变量的输出。
$ echo $_name
输出:
abid
在 bash 中声明一个整数变量。
$ _age=24
同样,使用 echo,我们也可以获得该变量的输出。
$ echo $_age
输出:
24
Bash 中变量的作用域
Bash 变量的范围可以是局部的或全局的,就像在任何其他编程语言中一样。 它们在我们的 Bash 脚本中的何处声明并不重要。
默认情况下,bash 中的所有变量都具有全局范围。 这表明变量可以在 bash 脚本的任何函数内使用,即使它是在脚本中间定义的。
换句话说,我们可能会争辩说,在 bash 中,我们不必总是在脚本的开头声明一个变量以使其作用域成为全局变量。
此外,如果我们希望该变量的范围限于特定函数,则在 bash 中声明变量时必须显式使用 local 关键字,这意味着该脚本或其他任何地方的其他函数都不能访问它。
这将确保变量的范围仅限于定义它的函数。
变量类型
我们需要知道的主要有三种变量作用域。
- 局部变量
- 全局变量
- 环境变量
在 Bash 中访问局部变量
我们只能在声明它们的代码块内访问局部变量。 例如,如果我们在 Bash 脚本中声明一个变量,我们将无法在代码之外访问它。
示例代码:
#!/bin/bash
echo "Learning the scope of local and global variables."
function_localVar(){
echo "Within the function function_localVar"
echo "Assign a variable with local keyword to a variable name: varLocal"
local varLocal=27
echo "Assign a variable without local keyword to a variable name: varLocal_wo"
varLocal_wo=9
echo "Printing within the function."
echo "Value assigned to one with local keyword varLocal = $varLocal and without local keyword varLocal_wo = $varLocal_wo"
echo "Exiting function_localVar"
}
glob_var=91
echo "Start of the code!"
echo "Global Variable = $glob_var"
echo "Local variable before calling function to one with local keyword varLocal = ** $varLocal ** and without local keyword varLocal_wo = ** $varLocal_wo **"
echo "Calling the function."
function_localVar
echo "Printing outside the function."
echo "Value assigned to one with local keyword varLocal = $varLocal and without local keyword varLocal_wo = $varLocal_wo"
输出:
Learning the scope of local and global variables.
Start of the code!
Global Variable = 91
Local variable before calling function to one with local keyword varLocal = ** ** and without local keyword varLocal_wo = ** **
Calling the function.
Within the function function_localVar
Assign a variable with local keyword to a variable name: varLocal
Assign a variable without local keyword to a variable name: varLocal_wo
Printing within the function.
Value assigned to one with local keyword varLocal = 27 and without local keyword varLocal_wo = 9
Exiting function_localVar
Printing outside the function.
Value assigned to one with local keyword varLocal = and without local keyword varLocal_wo = 9
从下面的代码中可以清楚地看出,可能是 local 关键字将作用域设置为 local,即使在定义为 local 的函数外部读取变量时,它也返回空。
在 Bash 中访问全局范围变量
我们可以在整个 bash 脚本中访问全局变量。 下面的这个例子帮助我们理解全局变量作用域在 bash 中是如何工作的。
示例代码:
var1='Abid'
var2='Ali'
my_function () {
local var1='Micheal'
var2='Den'
echo "Inside function: var1: $var1, var2: $var2"
}
echo "Before executing the function: var1: $var1, var2: $var2"
my_function
echo "After executing the function: var1: $var1, var2: $var2"
输出:
Before executing the function: var1: Abid, var2: Ali
Inside function: var1: Micheal, var2: Den
After executing the function: var1: Abid, var2: Den
上述代码的结果使我们得出以下结论:
- 每当在函数范围内设置与现有全局变量同名的局部变量时,局部变量将优先。
- 确实可以在函数内部对全局变量进行更改。
环境变量
环境变量 (ENV) 本质上指定了环境的工作方式。 在 bash 中,环境变量可以具有全局或局部作用域。
我们可以在终端环境中的任何地方访问在该终端中生成的全局范围的 ENV。 因为它在终端限定的上下文中运行,所以它可以用在任何脚本、程序或进程中。
在终端中执行的任何应用程序或进程都无法访问那里指定的本地范围的 ENV。 只有我们定义变量的终端才能访问它。
设置环境变量
作为全局范围的环境变量:
$ export COUNTRY=USA
# 或者
$ set NAME=Abid
作为本地范围的环境变量:
$ NAME=Abid
现在,重点是如何显示环境变量。 我们可以使用 echo
像普通变量一样显示环境变量。
$ echo $COUNTRY
输出:
USA
此命令的输出将是我们分配给此变量 COUNTRY 的值,即 USA。
显示所有环境变量
我们可以使用三个不同的命令显示所有 ENV。
-
仅用于显示所有全局环境变量
$ printenv
-
我们使用这个命令来显示本地和全局环境变量
$ set
-
用于显示所有全局环境变量
$ env
相关文章
在 Bash 中运行 find -exec 命令
发布时间:2024/03/14 浏览次数:127 分类:操作系统
-
本文将演示如何使用 find 命令的 -exec 参数来使用 find 命令定位文件中的任何文本。