任何编程语言都会涉及到变量这个概念。变量我们可以认为是用来在内存中表示一些会变化的值。
变量的表现形态一般都是一组字母数字或符号组成的。
在 shell 中,直接使用等式即可声明一个变量或者修改变量的值。
比如:
name=tester
注意:
- 在 shell 中,等号前后不能有空格;
name
为变量名,tester
为变量值;- 如果变量值中没有空格,可以不加引号。
变量在定义的时候不需要任何符号,但是在使用的时候需要在前面加上$
符号。另外,最好加${变量名}
的形式,以便能够区分变量的边界。
echo $name
echo hi ${name} is your name # 如果不加大括号,就无法确定变量名的边界
引用变量的时候使用${变量名}
,是一种好的习惯。
变量中使用引号
这里有一个很有意思的事情,就是在变量值中使用单双引号。
- 双引号内的特殊字符如 $ 等,可以保有原本的特性;
- 单引号内的特殊字符则仅为一般字符 (纯文本)
单引号
看下面的例子:
echo 'hi ${name} is \n your name'
# hi ${name} is \n your name
我们可以看到在 echo 后面输出的字符串中,变量${name}
并没有被正常对待,还是按照原封原样的打印出来了。
也就是说,单引号里面的字符串是单纯的字符,没有特殊字符一说。如果了解 Python 字符串的朋友,应该知道 r 字符串
,这就相当于在字符串前面加了一个 r。
双引号
继续看例子:
echo "hi ${name} is \n your name"
# hi tester is \n your name
双引号包裹下的字符串,在打印时能够正常识别里面的变量${name}
。${name} 得到了实际的值 tester。
但是换行符\n
依然没有被正常对待。这就需要 echo 命令的-e
参数才能正确处理换行符这一类的字符。
echo -e "hi ${name} is \n your name"
#hi tester is
# your name
修改变量的值
重新赋值
重新赋值很简单,直接用变量=其他值即可。
name=tester
echo $name
# tester
name=dev # 重新赋值
echo $name
# dev
扩充变量值
我们还可以直接增加变量的值。
比如,我们想给 name 变量中追加一个姓
name=tester
echo $name
# tester
name=${name}Zhang # 追加内容
echo $name
# testerZhang
仔细看看这一句name=${name}Zhang
,name=
表示重新赋值,${name}
相当于取出 name 变量中已有的值,直接追加在后面的Zhang
相当于在原有的值后面接上字符串。
把原有变量的值取出来,追加上后面的字符,再重新赋值给该变量。
比如系统环境变量中的PATH
变量,我们想追加一个目录/opt/bin
,那么可以写为:
PATH=${PATH}:/opt/bin
删除变量
通过unset
命令可以删除已有的变量。
name=tester
echo $name
# tester
unset name
echo $name
# 空了,没有了!
在变量中执行命令
在变量中加入反引号"`"(键盘上 Esc 键下方),可以执行命令。
l="`ls /`" # 在变量 l 中保存了一个命令 ls
echo $l
# bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
观察一下,变量l
中在反引号中包裹了ls /root
命令。当我们通过 echo 输出该变量时,就会执行 ls 命令,并将结果作为变量值输出。