Linux下高效编写Shell(5)

3. 表示先前的工作目录(previous working directory),因此,如果你cd到其他目录下要放回前一个路径的时候,可以使用cd -来达到目的,其实,这里的[-]使用的是环境变量的$OLDPWD,注意:这里的[-]和前一点是不同的;

4. 减号或者负号,用在算术操作中。

 
=  

等号(Equals)。

1. 赋值操作,给变量赋值,么有空格在等号两侧;

2. 在比较测试中作为比较符出现,这里要注意,如果在中括号中作为比较出现,需要有空格符在等号左右两侧。

 
+  

加号(Plus)。

1. 算术操作符,表示加法;

2. 在正则表达式中,表示的是其前的这个匹配规则匹配最少一次;

3.在命令或过滤器中作为选项标记,在某些命令或者内置命令中使用+来启用某些选项,使用-来禁止;

4. 在参数替换(parameter substitution)中,+前缀表示替代值(当变量为空的时候,使用+后面的值)

 
%  

百分号(modulo[percent sign])。

1.在算术运算中,这个是求模操作符,即两个数进行除法运算后的余数;

2. 在参数替换(parameter substitution)中,可以作为模式匹配。例子:

p=b*9

var="abcd12345abc479"

echo ${var%p}, ${var%%p}

##从右边开始查找(想想从左是那个符号?)

##任何在b和9之间的内容(含)

##第一个是找到最短的符合匹配项

##后一个是找最大符合的匹配项(贪婪匹配?)

 
~  

波浪号(Home directory[tilde])。

这个和内部变量$HOME是一样的。默认表示当前用户的家目录(主目录),这个和~/效果一致,如果波浪号后面跟用户名,表示是该用户的家目录。

 
~+  

当前的工作目录(current working directory)。

这个和内置变量$PWD一样。

 
~-  

前一个工作目录(previous working directory)。

这个和内部变量$OLDPWD一致,之前的[-]也一样。

 
=~  

Bash 版本3中有介绍,这个是正则表达式匹配。可用在[[]]测试中,比如:

var="this is a test message."

[["$var"=~ tf*message ]]&& echo "Sir. Found that."|| echo "Sorry Sir. No match be found."

##你可以修改中间的正则表达式匹配项,正则表达式可以但不一定需要使用双引号括起来。

 
^  

脱字符(caret)。

1. 在正则表达式中,作为一行的行首(beginning-of-line)位置标志符;

2. 在参数替换(Parameter substitution)中,这个用法有两种,一个脱字符(${var^}),或两个(${var^^}),分别表示第一个字母大写,全部大写的意思(Bash version >=4)。

 
空白  

空白符(Whitespace)。

空白符不仅仅是指空格(spaces),还包括制表符(tabs),空行(blank lines),或者这几种的组合。可用做函数的分隔符,分隔命令或变量,空行不会影响脚本的行为,因此可以用它来规划脚本代码,以增加可读性,在内置的特殊变量$IFS可以用来针对某些命令进行输入的参数进行分割,其默认就是空白符。在字符串或变量中如果有空白符,可以使用引号来规避可能的错误。

 

怎样,你有多少是了解的呢?Mitchell在开始的Shell脚本时候,发现在这里面有好多都是不认识呢。

说明:因为涉及到翻译,文中内容不一定完全翻译准确,如果你发现有错误的地方,还请包涵指正。

参考:

本文主要内容来源:Advanced Bash-Scripting Guide

对话 UNIX: !$#@*%

wikipedia的Here文档

参考内容为本篇成文之际给予Mitchell帮助较大的文章,在整个过程中还有很多网站信息给我提供了帮助,在此对他们的作者的无私贡献表示感谢!

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/16109.html