一 正则表达式
1.在这里就不详细列举正则表达式中各种元字符的功能
仅仅说一下,在看这一章遇到的一个小问题
* 匹配前一个字符的任意多次(包括零次)
eg "1133*",更明确的应该写成"113(3*)"
可以理解它匹配113(0个3) 1133(1个3),但是为什么可以
匹配111312?
111312 因为它是这样匹配的此时匹配了1个3,并没有匹配
开头和结尾,要想匹配开头和结尾的话,需要改成"^1133*$" ,
此时就只能匹配以113开头,且后面有n(n>=0)个3的情况。
二 通配
下面介绍另一概念:通配。这是一个很容易跟正则表达式混淆的概念。
Bash本省没有正则表达式的功能,在脚本里,使用正则表达式的是命令和软件包。
eg sed,grep和awk,他们可以解释正则表达式。
Bash所做的时展开文件名扩展---这就是所谓的通配(globbing)--单它不是使用标准的
正则表达式。而是使用通配符。通配解释标准的通配符*和?,方括号括起来的字符,
还有其他的一些特殊的字符(eg用^表示反匹配;然而^在正则表达式中匹配一行的开始。
同时注意在正则表达式中[^b-d]和^[b-d]的区别,前者表示匹配b,c,d之外的字符,后者表示
以b,c,d开头的)。然而匹配机制的通配符有很大的局限性。包含有*号的字符串将不会匹配
以点卡头的文件。
三 subshell
1.外部命令能生成一个子进程,然而内建命令却不,因此内建明亮比外部命令执行效率高。
2.(command1,command2,..)嵌在圆括号里的一列命令在一个子shell中运行,在子shell
里与你性能该的变量不能被这段子shell代码块之外的脚本访问。只有export某些变量后,
该子shell的子进程中才能访问。在{...}中运行的命令不会产生一个子shell,在其中运行。
3.eg.
#!/bin/bash
show()
{var=100}
(var1=200)
echo $va $var1 #result 100 null
四 进程替换
1.进程替换与命令很相似。命令替换把一个命令的结果赋给一个变量。
eg,var=`ls -l` or var=$(ls -l),进程替换是把一个进程的输出回馈给另一进程,
即把一个命令的结果发送给另一命令,有点管道的意思。
<(command),>(command)
值得注意的是<,>和(之间没有空格。