Shell 变量

Shell 变量

变量名

The name of a variable can contain only letters (a to z or A to Z), numbers ( 0 to 9) or the underscore character ( _).

By convention, Unix shell variables will have their names in UPPERCASE.

合法的变量

1
2
3
4
_ALI
TOKEN_A
VAR_1
VAR_2

非法变量

1
2
3
4
2_VAR
-VARIABLE
VAR1-VAR2
VAR_A!

定义变量

1
variable_name=variable_value

例如:

1
NAME="Zara Ali"

shell 允许变量存你想要的任何值, 例如

1
2
VAR1="Zara Ali"
VAR2=100

获取变量的值

通过在变量前添加$来引用变量

1
2
3
4
#!/bin/sh

NAME="Zara Ali"
echo $NAME

输出

1
Zara Ali

只读变量

在变量前添加readonly将变量标记为只读,只读变量不允许被修改。

1
2
3
4
5
#!/bin/sh

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

报错

1
NAME: readonly variable

删除一个变量

使用unset命令删除一个变量,变量被删除后,无法访问该变量的值。

1
unset variable_name

例如

1
2
3
4
5
#!/bin/sh

NAME="Zara Ali"
unset NAME
echo $NAME

NAME 被删除, 输出为空。

变量类型

  • 本地变量

    • 使用local关键字修饰的变量
    • 只能用在函数内部
    • 如果与全局变量同名,在函数内部,会屏蔽同名的全局变量
    • 函数的参数是local
  • shell 全局变量

    • 在 Shell 中定义的变量,默认就是全局变量。
    • 在函数内部定义的变量,没有用local关键字修饰,也是全局变量
  • 环境变量

    • 全局变量只在当前 Shell 进程中有效,对其它 Shell 进程和子进程都无效。如果使用export命令将全局变量导出,那么它就在所有的子进程中也有效了,这称为“环境变量”。

在shell 函数中定义的变量也是全局变量

1
2
3
4
5
6
7
8
9
#!/bin/bash
#定义函数
function func(){
a=99
}
#调用函数
func
#输出函数内部的变量
echo $a

输出结果:

1
99

要想变量的作用域仅限于函数内部,可以在定义时加上local命令,此时该变量就成了局部变量。

1
2
3
4
5
6
7
8
9
10
11
12
#!/bin/bash

#定义函数
function func(){
local a=99
}

#调用函数
func

#输出函数内部的变量
echo $a

输出结果为空,表明变量 a 在函数外部无效,是一个局部变量。


Shell 变量
https://yxibng.github.io/2022/02/25/Shell/2022-02-25-Shell 变量/
作者
yxibng
发布于
2022年2月25日
许可协议