### 部分概念 - 变量和值之间不能有空格 - 默认所有变量类型都是字符串 - 变量名区分大小写 - 变量名不能含有特殊符号 & ? * # - 变量名不能以数字开头 - 可以使用下划线开头 - 名字尽量做到见名知意 ### 切片 - ${变量名:索引开始位置:切片长度} - 切片长度可以超过变量实际长度 ``` 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)