定义变量
name1='zdkk' # 单引号定义字符串
name2="zdkk" # 双引号定义字符串
name3=zdkk # 可以不加引号,也是字符串
使用变量
使用变量,必须加上$
符号,或者${}
符号。花括号是可选的,主要为了帮助解释器识别变量边界。
name=zdkk
echo $name # 输出zdkk
echo ${name} # 输出zdkk
echo ${name}Learning # 输出zdkkLearning
已定义的变量,可以被重新定义
name=zdkk
echo $name # 输出 zdkk
name=abc
echo $name # 输出 abc
只读变量
使用readonly
或者declare
可以将变量变为只读。
name=zdkk
readonly name
declare -r name # 这两种方式均可将name变为只读变量
name=abc #会报错,因为此时name为只读变量
删除变量
name=zdkk
echo $name # 输出 zdkk
unset name
echo $name # 输出空行
变量类型
他们之间的区别:
单引号:所见即所得
- 单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的;
- 单引号字串中不能出现单独一个的单引号(对单引号使用转义符后也不行),但可成对出现,作为字符串拼接使用。
echo 'abc''def'
输出 abcdef
双引号:
- 双引号里可以有变量
- 双引号里可以出现转义字符
- 双引号中命令可以被执行
不加引号
基本等同于加双引号,但有区别
str="Hello World!"
expr $str # expr: syntax error: unexpected argument 'World!'
expr "$str" # Hello World!
echo \& # 输出 &
echo "\&" # 输出 \&
获取字符串长度
name=zdkk
echo ${#name} # 输出 4
提取子串
name="Hello, zdkk"
echo ${name:0:5} # 输出 Hello