|NO.Z.00042|——————————|LinuxShell|——|Linux&Shell$特殊符号.V02|——|通配符|单引号|双引号|反引号|小括号|中括号|大括号|
一、Bash 中其他特殊符号
作用 | |
'' | 单引号,在单引号中所有的特殊符号,如“$”和“”(反引号)都没有特殊含义 |
"" | 双引号,在双引号中特殊符号都没有特殊含义, 但是“$""`"和”\"是例外拥有“调用变量的值,“引用命令“和”转义符“的特殊含义 |
`` | 反引号,反引号括起来的内容是系统命令,在Bash中会先执行它, 额()因为反引号非常容易看错 |
$() | 和反引号作用一样,用来引用系统命令 |
() | 用于一串命令执行时,()中的命令会在shell中运行 |
{} | 用于一串命令执行时,{}中命令会在当前shell中执行,也可以用于变量变形与替换 |
[] | 用于变量的测试 |
# | 在shell脚本中,#开头的代表注释 |
$ | 用于调用变量的值,如需要调用变量name的值时,需要用$name的方式得到变量的值 |
\ | 转义符,跟在\之后的特殊符号失去特殊含义,变为普通转义字符, 如$将输出”$"符号,而不当做是变量引用。 |
二、单引号和双引号
### --- 定义变量 name 的值是 sc(就是最正直的人,超哥我了!)
[root@localhost ~]# name=sc
### --- 如果输出时使用单引号,则$name 原封不动的输出
[root@localhost ~]# echo '$name'
$name
### --- 如果输出时使用双引号,则会输出变量 name 的值 sc
[root@localhost ~]# echo "$name"
sc
### --- 反引号括起来的命令会正常执行
[root@localhost ~]# echo `date`
2018 年 10 月 21 日 星期一 18:16:33 CST
### --- 但是如果反引号命令被单引号括起来,那么这个命令不会执行,`date`会被当成普通字符输出
[root@localhost ~]# echo '`date`'
`date`
### --- 如果是双引号括起来,那么这个命令又会正常执行
[root@localhost ~]# echo "`date`"
2018 年 10 月 21 日 星期一 18:14:21 CST
三、反引号
### --- 如果命令不用反引号包含,命令不会执行,而是直接输出
[root@localhost ~]# echo ls
ls
### --- 只有用反引号包括命令,这个命令才会执行
[root@localhost ~]# echo `ls`
anaconda-ks.cfg
install.log install.log.syslog sh test testfile
### --- 使用$(命令)的方式也是可以的
[root@localhost ~]# echo $(date)
2018 年 10 月 21 日 星期一 18:25:09 CST
四、小括号、中括号和大括号
### --- 在介绍小括号和大括号的区别之前,
~~~ 我们先要解释一个概念,那就是父 Shell 和子 Shell。
~~~ 在我们的 Bash 中,是可以调用新的 Bash 的,比如:
[root@localhost ~]# bash
~~~ # 这时,我们通过 pstree 命令查看一下进程数:
~~~ # 知道了父 Shell 和子 Shell,我们接着解释小括号和大括号的区别。
~~~ # 如果是用于一串命令的执行,那么小括号和大括号的主要区别在于:
~~~ ()执行一串命令时,需要重新开一个子 shell 进行执行
~~~ {}执行一串命令时,是在当前 shell 执行;
~~~ ()和{}都是把一串的命令放在括号里面,并且命令之间用;号隔开;
~~~ ()最后一个命令可以不用分号;
~~~ {}最后一个命令要用分号;
~~~ {}的第一个命令和左括号之间必须要有一个空格;
~~~ ()里的各命令不必和括号有空格;
~~~ ()和{}中括号里面的某个命令的重定向只影响该命令,
~~~ 但括号外的重定向则影响到括号里的所有命令。
[root@localhost ~]# pstree
init─┬─abrt-dump-oops
~~~ …省略部分输出
├─sshd─┬─sshd───bash───bash───pstree
~~~ 还是举几个例子来看看吧,这样写实在是太抽象了:
~~~ 在父 Shell 中定义变量 name 的值是 sc
[root@localhost ~]# name=sc
~~~ 如果用()括起来一串命令,这些命令都可以执行给 name 变量重新赋值,但是这个值只在子 Shell 中生效
[root@localhost ~]# (name=liming;echo $name)
liming
~~~ 父 Shell 中 name 的值还是 sc,而不是 liming
[root@localhost ~]# echo $name
sc
~~~ 但是用大括号来进行一串命令的执行时,name 变量的修改是直接在父 Shell 当中的注意大括号的格式
[root@localhost ~]# { name=liming;echo $name; }
liming
~~~ 所以 name 变量的值已经被修改了
[root@localhost ~]# echo $name
liming
Walter Savage Landor:strove with none,for none was worth my strife.Nature I loved and, next to Nature, Art:I warm'd both hands before the fire of life.It sinks, and I am ready to depart
——W.S.Landor
分类:
cdv008-shell
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」