一 通配符

[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中的特殊字符(三)的更多相关文章

  1. Shell脚本中的特殊字符(美元符、反斜杠、引号等)作用介绍

    Shell中的特殊字符有 1.$ 美元符 2.\ 反斜杠 3.` 反引号 4." 双引号 5.< ,>;,*,?,[,] 下面我一一举列说明 一.$符号 1.echo $? 显示 ...

  2. shell中的双引号,单引号,反引号

    在shell中引号分为三种:单引号,双引号和反引号. 单引号 ‘ 由单引号括起来的字符都作为普通字符出现.特殊字符用单引号括起来以后,也会失去原有意义,而只作为普通字符解释.单引号用于保持引号内所有字 ...

  3. shell中的输出重定向

    shell中默认有三个标准设备:标准输入(STDIN).标准输出(STDOUT).标准错误(STDERR). 在Linux系统中,一切(或几乎一切)都是文件.因此,标准输入的文件描述符是0,标准输出的 ...

  4. shell 中的通配符:

    shell 中的通配符: *: 代表 0 个或者多个任意字符 ?: 代表一定有一个的任意字符 []: 代表一定有一个在括号内的字符(非任意字符).例如[abcd]代表一定有一个字符,可能是 abcd ...

  5. Shell脚本笔记(三)shell中的数学计算

    shell中的数学计算 一.使用方括号 #!/bin/bash a= b= c= res=$[$a * ($c-$b)] echo $res 二.使用(()) +)) ((i=+)) b=$((-*) ...

  6. Shell中三种引号的用法及区别

    Linux Shell中有三种引号,分别为双引号(" ").单引号(' ')以及反引号(` `). 其中双引号对字符串中出现的$.''.`和\进行替换:单引号不进行替换,将字符串中 ...

  7. centos shell脚本编程2 if 判断 case判断 shell脚本中的循环 for while shell中的函数 break continue test 命令 第三十六节课

    centos  shell脚本编程2 if 判断  case判断   shell脚本中的循环  for   while   shell中的函数  break  continue  test 命令   ...

  8. centos shell脚本编程1 正则 shell脚本结构 read命令 date命令的用法 shell中的逻辑判断 if 判断文件、目录属性 shell数组简单用法 $( ) 和${ } 和$(( )) 与 sh -n sh -x sh -v 第三十五节课

    centos   shell脚本编程1 正则  shell脚本结构  read命令  date命令的用法  shell中的逻辑判断  if 判断文件.目录属性  shell数组简单用法 $( ) 和$ ...

  9. shell编程学习笔记(三):Shell中局部变量的使用

    现在我们看一下Shell中局部变量的使用 以下蓝色字体部分为Linux命令,红色字体的内容为输出的内容: # cd /opt/scripts # vim script03.sh 开始编写script0 ...

随机推荐

  1. spring boot1.1 idea + springboot + mybatis(mybatis-generator) +mysql +html实现简单的登录注册

    前言 这两年springboot比较火,而我平时的工作中不怎么使用spring boot,所以工作之余就自己写写项目练练手,也跟大家一起学习. 打算从最开始的搭架子,登录注册,到后台管理的增删改查,业 ...

  2. map的常见用法

    map的常见用法 map 是什么? map是一组键值对的组合,通俗理解类似一种特殊的数组,a[key]=val,只不过数组元素的下标是任意一种类型,而且数组的元素的值也是任意一种类型.有点类似pyth ...

  3. adb 设置安卓连接wifi

    一. 修改wpa_supplicant.conf文件 1.1. 获得root权限 adb root 1.2. 将wpa_supplicant.conf拷贝到你的电脑 adb pull /data/mi ...

  4. Magento开发基础知识之RequireJs

    一.RequireJS概述 RequireJS是一个工具库,主要用于客户端的模块管理.实现异步或动态加载,从而提高代码的性能和可维护性. RequireJS的基本思想是,通过define方法,将代码定 ...

  5. 小白学习django第三站-自定义过滤器及标签

    要使用自定义过滤器和标签,首先要设置好目录结构 现在项目目录下建立common的python包 再将common加入到setting.py中的INSTALLED_APP列表中 在common创建目录t ...

  6. MQ的用途与对比

    RabbitMQ系列第一课:RabbitMQ安装 RabbitMQ系列第二课:RabbitMQ的原理介绍 RabbitMQ系列第三课:MQ用途与产品对比 一.MQ的用途:解耦和流量肖锋  二.常用MQ ...

  7. HashMap、HashTable、ConcurrentHashMap、TreeMap、LinkedHashMap、WeakHashMap区别

    1. HashMap   标准链地址法实现(下图).数组方式存储key/value,线程非安全,允许null作为key和value,key不可以重复,value允许重复,不保证元素迭代顺序是按照插入时 ...

  8. nginx 针对特定地区的ip进行规则匹配

    使用geoip模块,加载ip库 geoip_country GeoIP.dat; geoip_city GeoLiteCity.dat; 转自http://ju.outofmemory.cn/entr ...

  9. 下载 Eclipse 免安装版~

    进入https://www.eclipse.org/downloads/

  10. python多线程之threading、ThreadPoolExecutor.map

    背景: 某个应用场景需要从数据库中取出几十万的数据时,需要对每个数据进行相应的操作.逐个数据处理过慢,于是考虑对数据进行分段线程处理: 方法一:使用threading模块 代码: # -*- codi ...