Linux反引号的作用(附带实例)
在 Linux 中,反引号包含的字符串会被当作命令执行。
在脚本中,我们可能需要将某命令执行结果赋值给变量。在这种情况下,就会发现一些问题,变量赋值的格式为“name=value”,如果直接将命令写在 value 部分,就会将命令本身进行赋值,而不是用命令执行结果进行赋值,执行结果如下:
反引号的作用和 $(命令) 是一样的,但是反引号非常容易和单引号混淆,因此推荐大家使用 $(命令) 的方式引用命令的输出,具体如下:
在脚本中,我们可能需要将某命令执行结果赋值给变量。在这种情况下,就会发现一些问题,变量赋值的格式为“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 规范的角度来说,应尽量使用 $(命令) 的方式来引用命令的输出,不要使用反引号。