typora/note/Shell/变量概念.md
2024-12-12 10:48:55 +08:00

118 lines
2.6 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

### 部分概念
- 变量和值之间不能有空格
- 默认所有变量类型都是字符串
- 变量名区分大小写
- 变量名不能含有特殊符号 & ? * #
- 变量名不能以数字开头
- 可以使用下划线开头
- 名字尽量做到见名知意
### 切片
- ${变量名:索引开始位置:切片长度}
- 切片长度可以超过变量实际长度
```
me@me-EQ59:~$ A=123456
me@me-EQ59:~$ echo $A
123456
me@me-EQ59:~$ echo ${A}
123456
me@me-EQ59:~$ echo ${A:2:4}
3456
me@me-EQ59:~$
```
### 命令的结果赋值给变量
- 反引号 包裹
```
me@me-EQ59:~$ A=`date +'%F %T'`
me@me-EQ59:~$ echo $A
2023-06-22 22:48:00
me@me-EQ59:~$
```
- $() 包裹
```
me@me-EQ59:~$ A=$(date +'%F %T')
me@me-EQ59:~$ echo $A
2023-06-22 22:49:25
me@me-EQ59:~$
```
### 交互式给变量赋值
- read 参数 变量名
```
me@me-EQ59:~$ read name
name
me@me-EQ59:~$ echo $name
name
me@me-EQ59:~$
```
- 输入提示
```
me@me-EQ59:~$ read -p "Input your name:" name
Input your name:tom
me@me-EQ59:~$ echo $name
tom
me@me-EQ59:~$
```
- 输入提示,隐藏用户输入内容
```
me@me-EQ59:~$ read -sp "Input your password:" pass
Input your password:me@me-EQ59:~$
me@me-EQ59:~$ echo $pass
123456
me@me-EQ59:~$
```
- 限制输入长度,超过长度后自动结束输入
```
me@me-EQ59:~$ read -n 5 -p "Input your name: " name
Input your name: zhangme@me-EQ59:~$ san
找不到命令 “san”但有 16 个相似命令。
me@me-EQ59:~$ echo $name
zhang
me@me-EQ59:~$
```
- 限制用户输入超时时间,超过限制时间自动关闭输入
```
me@me-EQ59:~$ read -t 3 -p "Input your name:" name
Input your name:me@me-EQ59:~$
me@me-EQ59:~$ echo $name
me@me-EQ59:~$
```
### declare 定义限制变量
- https://www.runoob.com/linux/linux-comm-declare.html
- -i 整型,限定类型后不符合类型的值,会被设置为默认值
```
me@me-EQ59:~$ declare -i A=1234
me@me-EQ59:~$ echo $A
1234
me@me-EQ59:~$ A=hello
me@me-EQ59:~$ echo $A
0
me@me-EQ59:~$
```
- -r 只读变量,不能进行 unset 操作
- -x 设置环境变量
### 变量分类
- 本地变量,只在当前进程中有效
```
me@me-EQ59:~$ echo $A
0
me@me-EQ59:~$ bash
me@me-EQ59:~$ echo $A
me@me-EQ59:~$
```
- 环境变量,当前进程有效,并且能够被子进程调用
- env 查询当前用户的环境变量
- set 查询当前有的所有变量,包括环境变量和临时变量
- 全局变量:全局所有的用户和程序都能调用,且继承,新建的用户也能默认调用
- 系统变量shell 本身已经固定好的名字和作用
![8801a0e5453be03569f1ee0cf0adfda0.png](../../_resources/8801a0e5453be03569f1ee0cf0adfda0.png)