命令行扩展:`` 和 $()
单引号'' 双引号"" 反向单引号``
在很多场景下效果不同
[root@centos8 ~]#echo "echo $HOSTNAME"
echo centos8.localdomain
[root@centos8 ~]#echo 'echo $HOSTNAME'
echo $HOSTNAME
[root@centos8 ~]#echo `echo $HOSTNAME`
centos8.localdomain
结论:
- 单引号:六亲不认,变量和命令都不识别,都当成了普通的字符串 最傻
- 反向单引号:变量和命令都识别,并且会将反向单引号的内容当成命令进行执行后,再交给调用反向单引号的命令继续 最聪明
- 双引号:不能识别命令,可以识别变量 介于两者之间
:$( ) 和 ``
内部放命令
因为``反向单引号没办法区分配对,所以$()可以替代从而进行嵌套
[root@centos8 ~]#ll `echo `date +%F`.txt`
-bash: .txt: command not found
ls: cannot access 'date': No such file or directory
ls: cannot access '+%F': No such file or directory
[root@centos8 ~]#ll $(echo $(date +%F).txt)
-rw-r--r-- 1 root root 0 Mar 20 09:55 2020-03-20.txt
[root@centos8 ~]#ll `echo $(date +%F).txt`
-rw-r--r-- 1 root root 0 Mar 20 09:55 2020-03-20.txt
[root@centos8 ~]#ll $(echo `date +%F`.txt)
-rw-r--r-- 1 root root 0 Mar 20 09:55 2020-03-20.txt
斜杠 转义符
将原本的含义转成其他意义了
[root@centos8 ~]#echo $PATH
$PATH
[root@centos8 ~]#echo
[root@centos8 ~]#echo \
[root@centos8 ~]#echo \
[root@centos8 ~]#echo \\
\