特殊字符
注释符#
在echo命令给出的一个转义的#字符并不会开始一个注释,同样地,出现在一些参数代换结构和数值常量表达式中的#字符也同样不会开始一个注释。
1 echo "The # here does not begin a comment."
2 echo 'The # here does not begin a comment.'
3 echo The /# here does not begin a comment.
4 echo The # here begins a comment.
5
6 echo ${PATH#*:} # 前面的#是参数代换,不是注释.
7 echo $(( 2#101011 )) # 基本转换,不是注释.
命令分隔符【分号】:分隔符允许在同一行里有两个或更多的命令
if [ -x "$fiename" ];then
case语句分支的结束符【双分号】:
case "$variable" in
abc) echo "/$variable=abc";;
xyz) echo "/$variable=xyz";;
"点" 命令【圆点】:等同于source,这是一个bash的内建命令
"点",作为一个文件名的组成部分, 当点(.)以一个文件名为前缀时,起作用使该文件变成了隐藏文件。
touch .hellowheat
作为目录名时,单个点(.)表示当前目录,两个点(..)表示上一级目录
cd .(当前目录) cd ..(当前目录的父目录)
单点(.)文件名常常被当作文件移动命令的目的路径.
cp /home/hellowheat/* .
点(.)字符匹配.作为正则表达式的一部分,匹配字符时,单点(.)表示匹配任意一个字符
部分引用【双引号】:STRING"的引用会使STRING里的特殊字符能够被解释
完全引用【单引号】:'STRING'能引用STRING里的所有字符(包括特殊字符也会被原样引用). 这是一个比使用双引号(“)更强的引用
逗号操作符【逗号】:逗号操作符用于连接一连串的数学表达式。这一串的数学表达式每一个都被求值,但只有最后一个被返回。
let "t2 = ((a = 9, 15 / 3))" # Set "a = 9" and "t2 = 15 / 3"
转义符【后斜杠】:用于单个字符的引用机制
文件路径的分隔符【前斜杠】:分隔一个文件路径的个儿部分
命令替换【`command`】:引住的命令(command)执行结果能赋值给一个变量
空命令【冒号】:空操作。冒号":" 命令是Bash自身内建的,它的退出状态码是真(即0)。
①死循环可以这么写:
1 while :
2 do
3 operation-1
4 operation-2
5 ...
6 operation-n
7 done
8
9 # 等同于:
10 # while true
11 # do
12 # ...
13 # done
②在if/then的测试结构中用作占位符:
1 if condition
2 then : # 什么也不做的分支
3 else
4 take-some-action
5 fi
③在必须要有两元操作的地方作为一个分隔符
1 : ${username=`whoami`}
2 # ${username=`whoami`} 如果没有开头的:,将会出错
3 # 除非"username"是一个外部命令或是内建命令...
④和重定向操作符> 连用,可以把一个文件的长度截短为零,文件的权限不变。如果文件不存在,则会创建一个新文件。
: > data.XXX # 现在文件"data.XXX"长度为0了(作用相同于cat /dev/null >data.XXX(echo >data.XXX也可以)
# 但是,用NULL(:)操作符不会产生一个新的进程,因为NULL操作符是内建的。
⑤和添加重定向操作符(>>)连用(: >> target_file).如果目标文件存在则什么也没有发生,如果目标文件不存在,则创建它。
这只能应用在普通文件中,不能用在管道,符号链接和其他的特殊文件。