shell入门第七讲
1、引号细说
我们之前的学习中给大家讲解了变量赋值及引用的操作,那么讲解中说了一下赋值中,如果值包含有空格,我们一定要加上引号,单引号和双引号都是可以的,比如:
1.1、使用双引号
bash [root@localhost ~]# VAR="a b c" [root@localhost ~]# echo ${VAR} a b c
1.2、使用单引号
bash [root@localhost ~]# VAR='a b c' [root@localhost ~]# echo ${VAR} a b c
这样子一看其实区别是没有的,都可以达到一个变量赋值的目的。
1.3、单、双引号引用操作
定义一个变量的值时,我们还可以再次引用其他的变量,比如
bash [root@localhost ~]# NUM=666 [root@localhost ~]# VAR="a b c ${NUM}"
我们先定义了变量NUM。然后再定义第二个变量VAR时,可以把引用变量NUM的操作定义在VAR的值中。现在我们打印一下VAR变量值来看看效果
bash [root@localhost ~]# echo ${VAR} a b c 666
可以看到在打印 a b c的同时也把NUM的变量值打印出来了,可以看出来在打印变量操作中,如果变量的值包含了打印其他变量的操作,那么会一同打印出来。这样的操作在实际工作中也是非常常用的。
现在我们再来看看如果使用单引号是什么结果。
bash [root@localhost ~]# NUM=666 [root@localhost ~]# VAR='a b c ${NUM}' [root@localhost ~]# echo ${VAR} a b c ${NUM}
可以明显看到VAR变量中的NUM的值并没有打印出来,而是原样返回了结果。因此我们可以知道
单引号会使shell忽略特殊字符的含义,双引号则可以解释shell中特殊符号原有的意义。这也就是我们常说的单引号是强引用,双引号是弱引用。
2、命令结果替换
命令结果替换操作就是把一个命令的结果赋值给另外一个变量的过程,比如bash [root@localhost ~]# NUM=666 [root@localhost ~]# echo ${NUM} 666 [root@localhost ~]# echo ${NUMM}
我们还是定义了变量NUM的值为666,而NUMM变量没有值,因此打印为空,现在我使用反引号`来赋值给其他变量bash [root@localhost ~]# NUMM=
echo ${NUM}` [root@localhost ~]# echo ${NUMM} 666
反引号就是先执行反引号引起来的命令,把这个命令执行完毕后再执行其他的操作。
比如我们这里就是先echo打印NUM变量的值,然后把这个值再次赋值给NUMM变量,因此现在NUMM也是有变量值了,这就是将命令结果作为变量值的一个操作。
反引号是键盘上ESC下面的一个按键,反引号等效于使用 $() ,都是用于执行shell命令的,比如
bash [root@localhost ~]# ps aux | grep bash | head -1 | awk '{print $2}' 6283 [root@localhost ~]# PID=$(ps aux | grep bash | head -1 | awk '{print $2}') [root@localhost ~]# echo $PID 6283
我们上面是第一条命令是获取bash进程号,使用$()就是先把此进程号获取出来,然后赋值给PID变量,最后我们打印出来结果,一切符合预期。