迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 操作系统 >

Bash 变量作用域

作者:迹忆客 最近更新:2023/05/18 浏览次数:

在本文中,我们将了解 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 关键字,这意味着该脚本或其他任何地方的其他函数都不能访问它。

这将确保变量的范围仅限于定义它的函数。


变量类型

我们需要知道的主要有三种变量作用域。

  1. 局部变量
  2. 全局变量
  3. 环境变量

在 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

bash 变量范围 - 局部变量

从下面的代码中可以清楚地看出,可能是 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

bash 变量范围 - 全局变量

上述代码的结果使我们得出以下结论:

  • 每当在函数范围内设置与现有全局变量同名的局部变量时,局部变量将优先。
  • 确实可以在函数内部对全局变量进行更改。

环境变量

环境变量 (ENV) 本质上指定了环境的工作方式。 在 bash 中,环境变量可以具有全局或局部作用域。

我们可以在终端环境中的任何地方访问在该终端中生成的全局范围的 ENV。 因为它在终端限定的上下文中运行,所以它可以用在任何脚本、程序或进程中。

在终端中执行的任何应用程序或进程都无法访问那里指定的本地范围的 ENV。 只有我们定义变量的终端才能访问它。

设置环境变量

作为全局范围的环境变量:

$ export COUNTRY=USA
# 或者
$ set NAME=Abid

作为本地范围的环境变量:

$ NAME=Abid

现在,重点是如何显示环境变量。 我们可以使用 echo 像普通变量一样显示环境变量。

$ echo $COUNTRY 

输出:

USA

此命令的输出将是我们分配给此变量 COUNTRY 的值,即 USA。

显示所有环境变量

我们可以使用三个不同的命令显示所有 ENV。

  • 仅用于显示所有全局环境变量
    $ printenv
    
  • 我们使用这个命令来显示本地和全局环境变量
    $ set
    
  • 用于显示所有全局环境变量
    $ env
    

上一篇:Shell 编程中变量值加一

下一篇:没有了

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

Shell 编程中变量值加一

发布时间:2023/05/18 浏览次数:135 分类:操作系统

本篇文章我们将介绍如何在 bash 中增加一个变量。 我们还将学习在 Linux 中的 bash 脚本中使用的不同类型的增量运算符。

在 Bash 脚本中执行变量中的命令

发布时间:2023/05/18 浏览次数:107 分类:操作系统

本篇文章是关于将 Bash 命令存储在一个变量中,然后直接从这个变量中执行它。 首先,我们将讨论执行变量中包含的命令的多种方法,然后是几个脚本示例。

Bash 变量相乘

发布时间:2023/05/18 浏览次数:50 分类:操作系统

本篇文章介绍如何在 Bash 中将两个变量相乘。在 Bash 中乘以变量。将两个变量相乘在 Bash 中是一个简单的操作。

Bash md5sum 命令

发布时间:2023/05/18 浏览次数:197 分类:操作系统

本篇文章介绍如何在 Bash 中使用 md5sum 命令。Bash md5sum 命令。md5sum 命令打印给定文件的 32 字符和 128 位校验和。

在 Bash 中排序数组

发布时间:2023/05/18 浏览次数:150 分类:操作系统

对数组进行排序对于任何编程语言来说都是一项非常常见的任务。 在 Bash 脚本中,我们还可以通过两种不同的方式完成此任务。

Bash 中的多维数组

发布时间:2023/05/18 浏览次数:70 分类:操作系统

多维数组对于任何程序都是非常重要的元素。 它主要用于创建数据的表视图和许多其他用途。本文演示如何创建二维数组。 此外,我们将通过必要的示例和解释来讨论该主题。

在 Bash 中打印数组元素

发布时间:2023/05/18 浏览次数:192 分类:操作系统

本文将展示我们如何在 Bash 脚本中打印数组元素。 为此,我们将讨论 5 种不同的方法。在 Bash 中使用 echo 语句打印数组元素

将数组传递给 Bash 中的函数

发布时间:2023/05/18 浏览次数:118 分类:操作系统

这篇文章是关于在 Bash 脚本中使用函数并将数组传递给它们的。 在进入实际主题之前,我们将简要介绍 Bash 脚本。

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便