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

2.6 KiB
Raw Permalink Blame History

部分概念

  • 变量和值之间不能有空格
  • 默认所有变量类型都是字符串
  • 变量名区分大小写
  • 变量名不能含有特殊符号 & ? * #
  • 变量名不能以数字开头
  • 可以使用下划线开头
  • 名字尽量做到见名知意

切片

  • ${变量名:索引开始位置:切片长度}
  • 切片长度可以超过变量实际长度
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 定义限制变量

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