Shell中的特殊字符(三)
一 通配符

[root@192 test]# touch abc
[root@192 test]# touch abcd
[root@192 test]# touch 012
[root@192 test]# touch 0abc
[root@192 test]# ls *
012 0abc abc abcd
#“*”代表所有的文件
[root@192 test]# ls ?abc
0abc
#“?”匹配任意一个字符,所以会匹配 0abc
#但是不能匹配 abc,因为“?”不能匹配空
[root@192 test]# ls [0-9]*
012 0abc
#匹配任何以数字开头的文件
[root@192 test]# ls [^0-9]*
abc abcd
#匹配不已数字开头的文件
[root@192 test]#
二 特殊字符

1) 、单引号和双引号
[root@localhost ~]# name=sc
#定义变量 name 的值是 sc(就是最正直的人,超哥我了!)
[root@localhost ~]# echo '$name'
$name
#如果输出时使用单引号,则$name 原封不动的输出
[root@localhost ~]# echo "$name"
sc
#如果输出时使用双引号,则会输出变量 name 的值 sc
[root@localhost ~]# echo `date`
2018 年 10 月 21 日 星期一 18:16:33 CST
#反引号括起来的命令会正常执行
[root@localhost ~]# echo '`date`'
`date`
#但是如果反引号命令被单引号括起来,那么这个命令不会执行, `date`会被当成普通字符输出
[root@localhost ~]# echo "`date`"
2018 年 10 月 21 日 星期一 18:14:21 CST
#如果是双引号括起来,那么这个命令又会正常执行
2) 反引号
[root@192 ~]# a=$(date)
[root@192 ~]# echo $a
2019年 12月 12日 星期四 23:19:40 CST
[root@192 ~]# b=`date`
[root@192 ~]# echo $b
2019年 12月 12日 星期四 23:20:00 CST
3) 、小括号、中括号和大括号
在介绍小括号和大括号的区别之前,我们先要解释一个概念,那就是父 Shell 和子 Shell。在我
们的 Bash 中,是可以调用新的 Bash 的,比如:
[root@localhost ~]# bash
[root@localhost ~]#
这时,我们通过 pstree 命令查看一下进程数:
[root@192 ~]# pstree
systemd─┬─ModemManager───2*[{ModemManager}]
├─NetworkManager─┬─dhclient
│ └─2*[{NetworkManager}]
├─VGAuthService
├─2*[abrt-watch-log]
├─abrtd
├─accounts-daemon───2*[{accounts-daemon}]
├─alsactl
├─at-spi-bus-laun─┬─dbus-daemon
│ └─3*[{at-spi-bus-laun}]
├─at-spi2-registr───2*[{at-spi2-registr}]
├─atd
├─auditd─┬─audispd─┬─sedispatch
│ │ └─{audispd}
│ └─{auditd}
├─avahi-daemon───avahi-daemon
├─bluetoothd
├─boltd───2*[{boltd}]
├─chronyd
├─colord───2*[{colord}]
├─crond
├─cupsd
├─2*[dbus-daemon]
├─dbus-launch
├─dnsmasq───dnsmasq
├─docker-containe─┬─mongod───31*[{mongod}]
│ └─8*[{docker-containe}]
├─dockerd-current─┬─docker-containe───10*[{docker-containe}]
│ ├─docker-proxy-cu───6*[{docker-proxy-cu}]
│ └─10*[{dockerd-current}]
├─gdm─┬─X───3*[{X}]
│ ├─gdm-session-wor─┬─gnome-session-b─┬─gnome-shell─┬─ibus-daemon─┬+ ++
│ │ │ │ │ ├+ ++
│ │ │ │ │ └+ ++
│ │ │ │ └─14*[{gnome-sh+
│ │ │ ├─gsd-a11y-settin───3*[{gsd-a+
│ │ │ ├─gsd-clipboard───2*[{gsd-cli+
│ │ │ ├─gsd-color───3*[{gsd-color}]
│ │ │ ├─gsd-datetime───2*[{gsd-date+
│ │ │ ├─gsd-housekeepin───2*[{gsd-h+
│ │ │ ├─gsd-keyboard───3*[{gsd-keyb+
│ │ │ ├─gsd-media-keys───3*[{gsd-me+
│ │ │ ├─gsd-mouse───2*[{gsd-mouse}]
│ │ │ ├─gsd-power───3*[{gsd-power}]
│ │ │ ├─gsd-print-notif───2*[{gsd-p+
│ │ │ ├─gsd-rfkill───2*[{gsd-rfkill+
│ │ │ ├─gsd-screensaver───2*[{gsd-s+
│ │ │ ├─gsd-sharing───3*[{gsd-shari+
│ │ │ ├─gsd-smartcard───4*[{gsd-sma+
│ │ │ ├─gsd-sound───3*[{gsd-sound}]
│ │ │ ├─gsd-wacom───2*[{gsd-wacom}]
│ │ │ ├─gsd-xsettings───3*[{gsd-xse+
│ │ │ └─3*[{gnome-session-b}]
│ │ └─2*[{gdm-session-wor}]
│ └─3*[{gdm}]
├─gssproxy───5*[{gssproxy}]
├─ibus-portal───2*[{ibus-portal}]
├─ibus-x11───2*[{ibus-x11}]
├─irqbalance
├─ksmtuned───sleep
├─libvirtd───16*[{libvirtd}]
├─lsmd
├─lvmetad
├─packagekitd───2*[{packagekitd}]
├─polkitd───6*[{polkitd}]
├─pulseaudio───2*[{pulseaudio}]
├─rngd
├─rpcbind
├─rsyslogd───2*[{rsyslogd}]
├─rtkit-daemon───2*[{rtkit-daemon}]
├─smartd
├─sshd─┬─sshd───bash───pstree
│ └─sshd───sftp-server
├─systemd-journal
├─systemd-logind
├─systemd-udevd
├─tuned───4*[{tuned}]
├─udisksd───4*[{udisksd}]
├─upowerd───2*[{upowerd}]
├─vmtoolsd───{vmtoolsd}
├─wpa_supplicant
└─xdg-permission-───2*[{xdg-permission-}]
知道了父 Shell 和子 Shell,我们接着解释小括号和大括号的区别。如果是用于一串命令的执行,
那么小括号和大括号的主要区别在于:
()执行一串命令时,需要重新开一个子 shell 进行执行
{}执行一串命令时,是在当前 shell 执行;
()和{}都是把一串的命令放在括号里面,并且命令之间用;号隔开;
()最后一个命令可以不用分号;
{}最后一个命令要用分号;
{}的第一个命令和左括号之间必须要有一个空格;
()里的各命令不必和括号有空格;
()和{}中括号里面的某个命令的重定向只影响该命令,但括号外的重定向则影响到括号里的所有命令。
[root@192 ~]# echo $name
sc
#在父 Shell 中定义变量 name 的值是 sc
[root@192 ~]# (name=lm;echo $name)
lm
#如果用()括起来一串命令,这些命令都可以执行
#给 name 变量重新赋值,但是这个值只在子 Shell 中生效
[root@192 ~]# echo $name
sc
[root@192 ~]# { name=lm;echo $name; }
lm
#但是用大括号来进行一串命令的执行时, name 变量的修改是直接在父 Shell 当中的
#注意大括号的格式
[root@192 ~]# echo $name
lm
#所以 name 变量的值已经被修改了
Shell中的特殊字符(三)的更多相关文章
- Shell脚本中的特殊字符(美元符、反斜杠、引号等)作用介绍
Shell中的特殊字符有 1.$ 美元符 2.\ 反斜杠 3.` 反引号 4." 双引号 5.< ,>;,*,?,[,] 下面我一一举列说明 一.$符号 1.echo $? 显示 ...
- shell中的双引号,单引号,反引号
在shell中引号分为三种:单引号,双引号和反引号. 单引号 ‘ 由单引号括起来的字符都作为普通字符出现.特殊字符用单引号括起来以后,也会失去原有意义,而只作为普通字符解释.单引号用于保持引号内所有字 ...
- shell中的输出重定向
shell中默认有三个标准设备:标准输入(STDIN).标准输出(STDOUT).标准错误(STDERR). 在Linux系统中,一切(或几乎一切)都是文件.因此,标准输入的文件描述符是0,标准输出的 ...
- shell 中的通配符:
shell 中的通配符: *: 代表 0 个或者多个任意字符 ?: 代表一定有一个的任意字符 []: 代表一定有一个在括号内的字符(非任意字符).例如[abcd]代表一定有一个字符,可能是 abcd ...
- Shell脚本笔记(三)shell中的数学计算
shell中的数学计算 一.使用方括号 #!/bin/bash a= b= c= res=$[$a * ($c-$b)] echo $res 二.使用(()) +)) ((i=+)) b=$((-*) ...
- Shell中三种引号的用法及区别
Linux Shell中有三种引号,分别为双引号(" ").单引号(' ')以及反引号(` `). 其中双引号对字符串中出现的$.''.`和\进行替换:单引号不进行替换,将字符串中 ...
- centos shell脚本编程2 if 判断 case判断 shell脚本中的循环 for while shell中的函数 break continue test 命令 第三十六节课
centos shell脚本编程2 if 判断 case判断 shell脚本中的循环 for while shell中的函数 break continue test 命令 ...
- centos shell脚本编程1 正则 shell脚本结构 read命令 date命令的用法 shell中的逻辑判断 if 判断文件、目录属性 shell数组简单用法 $( ) 和${ } 和$(( )) 与 sh -n sh -x sh -v 第三十五节课
centos shell脚本编程1 正则 shell脚本结构 read命令 date命令的用法 shell中的逻辑判断 if 判断文件.目录属性 shell数组简单用法 $( ) 和$ ...
- shell编程学习笔记(三):Shell中局部变量的使用
现在我们看一下Shell中局部变量的使用 以下蓝色字体部分为Linux命令,红色字体的内容为输出的内容: # cd /opt/scripts # vim script03.sh 开始编写script0 ...
随机推荐
- 小记---------有关hadoop的HDFS命令行操作
HDFS命令操作 首先需要在xshell启动hadoop start-all.sh or start-hdfs.sh hadoop fs -ls / (显示当前目录下所有文件) h ...
- 手撕ES6--Promise
手撕ES6--Promise:https://www.jianshu.com/p/0925eae38d2c 手写一个Promise,附源码分析:https://blog.csdn.net/weixin ...
- java 集合 队列(Queue)
特点:特殊线性表,先进先出(FIFO first-in-first-out) 方法: java5中 添加java.util.Queue接口,java.util.Collection 的扩展类 add( ...
- C++中前置操作符和后置操作符的重载
1,C 语言中讨论了原生含义,C++ 中有必要考虑前置.后置操作符能够重载,有何问题: 2,值得思考的问题: 1,下面的代码有没有区别?为什么? 1,i++ // i 的值作为返回值,i 自增 1: ...
- 模板渲染JinJa2
模板渲染JinJa2 可以从数据库中查询数据,然后去替换我html中的对应内容(专业名词叫做模板渲染,你先渲染一下,再给浏览器进行渲染),然后再发送给浏览器完成渲染. 这个过程就相当于HTML模板 ...
- 字符集详解 ASCII码、Unicode、UTF-8 (转)
认识字符集 对于计算机而言,它仅认识两个0和1,不管是在内存中还是外部存储设备上,我们所看到的文字.图片.视频等等“数据”在计算机中都是已二进制形式存在的.不同字符对应二进制数的规则,就是字符的编码. ...
- webpack入门学习手记(一)
本人微信公众号:前端修炼之路,欢迎关注. 之前用过gulp.grunt,但是一直没有学习过webpack.这两天刚好有时间,学习了下webpack.webpack要想深入研究,配置的东西比较多,网上的 ...
- Jmeter 设置默认语言为中文
1.在apache-jmeter-4.0\bin目录下,打开jmeter.properties; 2.将#language=en改为#language=cn,保存 3.重新启动jmeter.
- Servlet监听器——实现在线登录人数统计小例子
一.概念 servlet监听器的主要目的是给web应用增加事件处理机制,以便更好的监视和控制web应用的状态变化,从而在后台调用相应处理程序. 二.监听器的类型 1.根据监听对象的类型和范围,分为3类 ...
- kibana报[FORBIDDEN/12/index read-only / allow delete (api)]错误
一.错误描述 1.在kibana,dev中pose数据,报[FORBIDDEN/12/index read-only / allow delete (api)]错误. 尝试过网上的说的方法一:在kib ...