!
取反一个测试结果或退出状态【感叹号】:取反操作符(!)取反一个命令的退出状态。它也取反一个测试操作。例如,它能将相等符(=)为不等符(!=),取反操作符是一个bash的关键字
在不同的环境里,感叹号也可以出现在间接变量引用.
还有一种环境里,在命令行中,感叹号(!)调用属于历史命令机制的调用.值得一提的是,在一个脚本里,命令历史机制是被禁止的。
*
通配符【星号】:星号(*)字符在用于匹配文件名扩展放入一个通配符。它自动匹配给定的目录下的每一个文件。
星号也用于正则表达式中匹配任意数字字符
算数操作符【星号】:在计算时,星号(*)表示乘法运算符。两个星号(**)表示求幂运算符。
?
测试操作符【?】:表示一个条件测试。
在双括号结构里,问号(?)表示C风格的三元操作符
在参数替换表达式里,问号(?)测试一个变量是否被设置了值.
通配符【?】 字符?被用于文件名扩展特性的文件名表达式的单字符匹配,同时也在扩展正则表达式中匹配任意一个字符.
$
变量替换【$】:引用一个变量的内容
行的结尾【$】:在正则表达式里,一个$字符表示匹配一行的结尾
${}
参数替换.
$*, $@
位置参数.
$?
保存退出码值的变量. 变量$?保存了一个命令,一个函数,或一个脚本的退出状态码的值。
$$
进程ID变量. 变量$$保存了脚本运行时的进程ID值。
()
命令组.
1 (a=hello; echo $a)
一组由圆括号括起来的命令是新开一个子shell来执行的.
因为是在子shell里执行,在圆括号里的变量不能被脚本的其他部分访问。因为父进程(即脚本进程)不能存取子进程(即子shell)创建的变量
1 a=123
2 ( a=321; )
3
4 echo "a = $a" # a = 123
5 # 在圆括号里的变量"a"实际上是一个局部变量,作用局域只是在圆括号内用于数组始初化
数组初始化.
1 Array=(element1 element2 element3)
{xxx,yyy,zzz,...}
扩展支持.
1 cat {file1,file2,file3} > combined_file
2 # 连接file1,file2,和file3的内容并写到文件combined_file里去.
3
4 cp file22.{txt,backup}
5 # 拷贝"file22.txt"内容为"file22.backup"
一个命令可以在文件名扩展中从逗号分隔的各模式来扩展参数列表。 [1] 文件名将会依照列表中逗号分隔开的模式匹配扩展。
在扩展中的所有模式都不能包含空白字符,除非空白字符是被转义或引用的。
echo {file1,file2}/ :{/ A," B",' C'}
file1 : A file1 : B file1 : C file2 : A file2 : B file2 : C
{}
代码块[花括号]. 这个结构也是一组命令代码块,事实上,它是匿名的函数。然而与一个函数所不同的,在代码块里的变量仍然能被脚本后面的代码访问。
bash$ { local a;
a=123; }
bash: local: can only be used in a function
1 a=123
2 { a=321; }
3 echo "a = $a" # a = 321 (结果是在代码块里的值)
4
5 # 多谢, S.C.