---
title: 变量
date: 2024-06-06T23:51:24Z
tags: []
---

## 引用变量用`$`

## 系统变量

| 变量            | 作用                                 |
| --------------- | ------------------------------------ |
| ​`$USER`​       | 当前用户的用户名                     |
| ​`$HOME`​       | 当前用户的家目录                     |
| ​`$PATH`​       | 包含可执行文件的目录列表，用冒号分隔 |
| ​`$PWD`​        | 当前工作目录的路径                   |
| ​`$SHELL`​      | 当前正在使用的 Shell 的路径          |
| ​`$?`​          | 表示上一个命令的退出状态             |
| ​`$$`​          | 表示当前 Shell 进程的 PID（进程 ID） |
| ​`$#`​          | 表示传递给脚本的位置参数的数量       |
| ​`$1, $2, ...`​ | 用于访问传递给脚本的参数             |

## 定义变量

直接定义比如
`A=100`
`$100`就可以引用

## 释放变量

unset 变量

## 静态变量

定义变量前加`readonly`

> 不可以被释放

## 定义名称规则

字母,下划线,数字组成,不能以数字开头
等号两侧不能有空格
变量名称不能为大写

### 命令

``=$()
例如
A=`ls -l`等于 A=$(ls -l)

‍

### 限定范围

​`declare`​ 在函数内默认声明局部变量，但可用 `-g`​ 声明全局变量

- **​`-r`​**​：将变量声明为只读

- **​`-i`​**​：将变量声明为整数

- **​`-a`​**​：声明一个索引数组

- **​`-A`​**​：声明一个关联数组（有时也称为哈希表或字典）

- **​`-f`​**​：列出所有函数名或者显示指定函数的定义。

- **​`-x`​**​：通过环境导出变量。这使得在子进程中也能访问这些变量。

- **​`-g`​**​：在函数内部强制声明全局变量。如果不使用 `-g`​，在函数内部使用 `declare`​ 默认声明的是局部变量。

​`local`​ 总是声明局部变量。`declare`​:脚本

‍
