Unix 简明教程

Unix / Linux - Using Shell Variables

在本章中,我们将学习如何在 Unix 中使用 Shell 变量。变量是一个字符字符串,我们为其分配一个值。分配的值可以是数字、文本、文件名、设备或任何其他类型的数据。

变量不过是实际数据的指针。shell 允许你创建、分配和删除变量。

Variable Names

变量的名称只能包含字母(a 到 z 或 A 到 Z)、数字(0 到 9)或下划线字符(_)。

根据惯例,Unix shell 变量的名称使用大写。

以下示例是有效的变量名称 −

_ALI
TOKEN_A
VAR_1
VAR_2

以下是无效变量名称的示例 −

2_VAR
-VARIABLE
VAR1-VAR2
VAR_A!

你无法使用 !*- 等其他字符的原因是,这些字符对 shell 具有特殊含义。

Defining Variables

变量的定义如下 −

variable_name=variable_value

例如 -

NAME="Zara Ali"

以上示例定义了变量 NAME 并为其分配值 "Zara Ali"。此类型的变量称为 scalar variables 。标量变量一次只能保存一个值。

Shell 允许你将任何值存储在变量中。例如 −

VAR1="Zara Ali"
VAR2=100

Accessing Values

要访问存储在变量中的值,请在其名称前加上美元符号 ( $ ) −

例如,以下脚本将访问定义的变量 NAME 的值并将其打印到 STDOUT −

#!/bin/sh

NAME="Zara Ali"
echo $NAME

以上脚本将生成以下值 −

Zara Ali

Read-only Variables

Shell 通过使用只读命令提供了一种将变量标记为只读的方法。变量标记为只读后,其值无法更改。

例如,以下脚本在尝试更改 NAME 的值时生成错误 −

#!/bin/sh

NAME="Zara Ali"
readonly NAME
NAME="Qadiri"

上述脚本会生成以下结果 -

/bin/sh: NAME: This variable is read only.

Unsetting Variables

取消或删除变量会指示 shell 从其跟踪的变量列表中删除该变量。取消变量后,你将无法访问变量中存储的值。

以下是使用 unset 命令取消已定义变量的语法 −

unset variable_name

以上命令取消已定义变量的值。以下是一个简单的示例,演示了该命令如何工作 −

#!/bin/sh

NAME="Zara Ali"
unset NAME
echo $NAME

以上示例不打印任何内容。你无法使用 unset 命令取消标记为 readonlyunset 变量。

Variable Types

当 shell 运行时,存在三种主要类型的变量 −

  1. Local Variables − 局部变量是当前 shell 实例中存在的一个变量。启动 shell 的程序无法访问它。它们是通过命令提示符设置的。

  2. Environment Variables − 子 shell 的所有进程都可以使用环境变量。某些程序需要环境变量才能正常运行。通常,shell 脚本仅定义其运行的程序所需的那些环境变量。

  3. Shell Variables − shell 变量是 shell 设置的特殊变量,shell 需要它才能正常运行。其中有些变量是环境变量,而另一些则是局部变量。