>[success] # shell 变量 ~~~ 1.变量必须以字母或下划线开头,名字中间只能由字母,数字和下划线组成 2.变量名的长度不得超过255个字符 3.变量名在有效范围内必须唯一 4.变量默认类型都是字符串 5.等号左右两边不能有空格 6.变量的类型: '字符串'、'整型'、'浮点型'、'日期型' ~~~ >[info] ## 定义变量 和 输出变量 >[danger] ##### 定义变量 ~~~ 1.如果变量不包含任何空白符(例如空格、Tab 缩进等),那么可以不使用引号; 2.如果 value 包含了空白符,那么就必须使用引号包围起来。 2.1.以单引号' '包围变量的值时,单引号里面是什么就输出什么这种方式比较适合定义显示纯字符串的情况, 即不希望解析变量、命令等的场景 2.2.以双引号" "包围变量的值时,输出时会先解析里面的变量和命令,而不是把双引号中的变量名和命令原样输出。 这种方式比较适合字符串中附带有变量和命令并且想将其解析后再输出的变量定义。 ~~~ >[danger] ##### 输出变量 ~~~ 1.输出变量值'$变量名' 或者 '${变量名}' ,变量名外面的花括号{ }是可选的,加不加都行,加花括号是为了帮助 解释器识别变量的边界,举个例子 skill="Java" echo "I am good at ${skill}Script" 如果不给 skill 变量加花括号,写成echo "I am good at $skillScript",解释器就会把 $skillScript 当成一个变量 (其值为空),代码执行结果就不是我们期望的样子了。 2.引用变量 '${变量名} ' ~~~ >[danger] ##### 举例子 ~~~ num1='1' num2=1 num3="num1" num4="$num1" num5="${num1}" echo $num1;echo $num2;echo $num3;echo $num4;echo $num5 // 输出结果 1 1 num1 1 1 ~~~ >[info] ## 定义只读变量 ~~~ 1.使用 readonly 命令可以将变量定义为只读变量,只读变量的值不能被改变。下面的例子会报错因为只读不能赋值 myUrl="/d/file/202003/tnqgclnw4zm1221" readonly myUrl myUrl="/d/file/202003/tnqgclnw4zm1221" ~~~ >[info] ## 查看变量 -- set / 删除变量 -- unset ~~~ 1.查询系统中默认所有已经生效的变量,包括系统变量,也包括自定义变量,直接'set' 查看全部变量 2.'set|grep num1' 查找生效变量中有num1的 3.删除变量'unset 变量名',删除'unset a' 变量为a的,unset 命令不能删除只读变量。 ~~~ >[danger] ##### 语系环境变量 -- locale ~~~ 1.查询当前系统语系'locale' 2.在Linux中通过locale来设置程序运行的不同语言环境,locale由ANSI C提供支持。 locale的命名规则为<语言>_<地区>.<字符集编码>,如zh_CN.UTF-8,zh代表中文, CN代表大陆地区,UTF-8表示字符集。 3.LANG: 定义系统主语系的变量 // 举个例子 locale LANG=zh_CN.UTF-8 echo $LANG ~~~