首页 > 编程笔记 > Linux笔记 阅读:19

Linux反引号的作用(附带实例)

在 Linux 中,反引号包含的字符串会被当作命令执行。

在脚本中,我们可能需要将某命令执行结果赋值给变量。在这种情况下,就会发现一些问题,变量赋值的格式为“name=value”,如果直接将命令写在 value 部分,就会将命令本身进行赋值,而不是用命令执行结果进行赋值,执行结果如下:
[root@localhost ~]# bootlist=ls /boot/
-bash:/boot/: 是一个目录

#赋值失败,如果值带有空格,就应该用双引号表示为整体
[root@localhost ~]# bootlist="ls /boot/"
#添加双引号后赋值成功
[root@localhost ~]# echo $bootlist
ls /boot/

#变量赋值时只是将命令当作字符串赋值给bootlist
[root@localhost ~]# bootlist=ls /boot/
[root@localhost ~]# echo $bootlist
ls /boot/

#使用单引号的结果和双引号相同
[root@localhost ~]# bootlist='ls /boot/'
[root@localhost ~]# echo $bootlist
ls /boot/

#使用反引号将命令包含
[root@localhost ~]# echo `bootlist`
System.map-5.14.0-70.13.1.el9_0.x86_64 config-5.14.0-70.13.1.el9_0.x86_64 efi grub2 initramfs-0-rescue-be6b16e074b440e7b127d1ce60c69ec5.img initramfs-5.14.0-7.13.1.el9_0.x86_64.img loader symvers-5.14.0-7.13.1.el9_0.x86_64.gz vmlinuz-0-rescue-be6b16e074b440e7b127d1ce60c69ec5 vmlinuz-5.14.14.0-7.13.1.el9_0.x86_64
#boot变量的值为ls /boot/命令的执行结果
无论是在命令行中还是在脚本中,当我们想要执行命令时,命令总是出现在当前行开头的位置,然后才是命令的选项。但是,在脚本执行过程中就会出现某些命令需要执行,但命令本身并没有在开头位置出现的情况,在这种情况下可以使用反引号将想要执行的命令包含在内,表示将字符串以命令的方式执行。

反引号的作用和 $(命令) 是一样的,但是反引号非常容易和单引号混淆,因此推荐大家使用 $(命令) 的方式引用命令的输出,具体如下:
[root@localhost ~]# echo ls
ls
#如果命令不用反引号包含,那么命令不会执行,而是直接输出
[root@localhost ~]# echo `ls`
anaconda-ks.cfg sh test test testfile
#只有使用反引号包含命令,这条命令才会执行
[root@localhost ~]# echo $(ls)
anaconda-ks.cfg sh test test testfile
#使用$(命令)的方式也是可以的
无论是从容易混淆的角度,还是从 POSIX 规范的角度来说,应尽量使用 $(命令) 的方式来引用命令的输出,不要使用反引号。

相关文章