Linux下高效编写Shell(2)

4. 在参数替换中为字符串变量赋值,在重定向操作(>)中,把一个文件长度截断为0(:>>这样用的时候,目标存在则什么都不做),这个只能在普通文件中使用,不能在管道,符号链接和其他特殊文件中使用;

5. 甚至你可以用来注释(#后的内容不会被检查,但:后的内容会被检查,如果有语句如果出现语法错误,则会报错);

6. 你也可以作为域分隔符,比如环境变量$PATH中,或者passwd中,都有冒号的作为域分隔符的存在;

7. 你也可以将冒号作为函数名,不过这个会将冒号的本来意义转变(如果你不小心作为函数名,你可以使用unset -f : 来取消function的定义)。

 
!  

感叹号(reverse (or negate) [bang],[exclamation mark])。

取反一个测试结果或退出状态。

1. 表示反逻辑,比如后面的!=,这个是表示不等于;

2. 表示取反,如:ls a[!0-9] #表示a后面不是紧接一个数字的文件;

3. 在不同的环境里面,感叹号也可以出现在间接变量引用里面;

4. 在命令行中,可以用于历史命令机制的调用,你可以试试!$,!#,或者!-3看看,不过要注意,这点特性不能在脚本文件里面使用(被禁用)。

 
*  

星号(wildcard/arithmetic operator[asterisk])。

1. 作为匹配文件名扩展的一个通配符,能自动匹配给定目录下的每一个文件;

2. 正则表达式中可以作为字符限定符,表示其前面的匹配规则匹配任意次;

3. 算术运算中表示乘法。

 
**  

双星号(double asterisk)。算术运算中表示求幂运算。

 
?  

问号(test operator/wildcard[Question mark])。

1. 表示条件测试;

2. 在双括号内表示C风格的三元操作符((condition?true-result:false-result));

3. 参数替换表达式中用来测试一个变量是否设置了值;

4. 作为通配符,用于匹配文件名扩展特性中,用于匹配单个字符;

5. 正则表达式中,表示匹配其前面规则0次或者1次。

 
$  

美元符号(Variable substitution[Dollar sign])。

1. 作为变量的前导符,用作变量替换,即引用一个变量的内容,比如:echo $PATH;

2. 在正则表达式中被定义为行末(End of line)。

 
${}  

参数替换(Variable substitution)。

用于在字符串中表示变量。

 
$‘...’  

引用内容展开,执行单引号内的转义内容(单引号原本是原样引用的),这种方式会将引号内的一个或者多个[\]转义后的八进制,十六进制值展开到ASCII或Unicode字符。

 

$*

$@

 

位置参数(Positional Parameters)。

这个在使用脚本文件的时候,在传递参数的时候会用到。两者都能返回调用脚本文件的所有参数,但$*是将所有参数作为一个整体返回(字符串),而$@是将每个参数作为单元返回一个参数列表。注意,在使用的时候需要用双引号将$*,$@括住。这两个变量受到$IFS的影响,如果在实际应用中,要考虑其中的一些细节。

 

$#

 

表示传递给脚本的参数数量。

 
$?  

此变量值在使用的时候,返回的是最后一个命令、函数、或脚本的退出状态码值,如果没有错误则是0,如果为非0,则表示在此之前的最后一次执行有错误。

 
$$  

进程ID变量,这个变量保存了运行当前脚本的进程ID值。

 
()  

圆括号(parentheses)。

1, 命令组(Command group)。由一组圆括号括起来的命令是命令组,命令组中的命令实在子shell(subshell)中执行。因为是在子shell内运行,因此在括号外面是没有办法获取括号内变量的值,但反过来,命令组内是可以获取到外面的值,这点有点像局部变量和全局变量的关系,在实作中,如果碰到要cd到子目录操作,并在操作完成后要返回到当前目录的时候,可以考虑使用subshell来处理;

2. 用于数组的初始化。

 
{x,y,z,...}  

花括号扩展(Brace Expansion)。

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

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