|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`
20181021 日 星期一 18:16:33 CST
### --- 但是如果反引号命令被单引号括起来,那么这个命令不会执行,`date`会被当成普通字符输出
[root@localhost ~]# echo '`date`'
`date`
 
### --- 如果是双引号括起来,那么这个命令又会正常执行
[root@localhost ~]# echo "`date`"
20181021 日 星期一 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)
20181021 日 星期一 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

 

posted on   yanqi_vip  阅读(32)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

导航

统计

点击右上角即可分享
微信分享提示