Linux命令行扩展和被括起来的集合

时间:2023-03-09 20:08:09
Linux命令行扩展和被括起来的集合

命令行扩展:`` 和 $()

单引号'' 双引号"" 反向单引号``

在很多场景下效果不同

[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 \\\\
\\