[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 变量的值已经被修改了
原文:https://www.cnblogs.com/dalianpai/p/12032410.html