首页 > 代码库 > bash特殊字符

bash特殊字符

用在bash脚本或命令行中的特殊字符

1、#井号 :注释

  • 在echo中转义的#是不能作为注释的

  • 某些特定的模式匹配操作也可以使用#、

2、; 分号:命令分隔符,使用命令分隔符,可以在同一行上写两个或两个以上的命令

3、;; 双分号:用来终止case选项

4、.点号 :

  • ”点“命令,等价于source命令

  • ”点“作为文件名的一部分. 如果点放在文件名的开头的话, 那么这个文件将会成为”隐藏“文件

  • ”点“字符匹配,当用作匹配字符的作用时,通常都是作为正则表达式的一部分来使用,”点“用来匹配任何的单个字符

5、"双引号:部分引用,“STRING”将会阻止(解释)STRING中大部分特殊的字符

6、`单引号:全引用,’STRING‘将会阻止STRING中所有特殊字符的解释

7、,逗号:逗号操作符.,逗号操作符链接了一系列的算术操作,虽然里边所有的内容都被运行了,但只有最后一项被返回

8、\反斜线:转义符

9、/斜线:文件名路径分隔符,也可用作除法算术操作符

10、`:命令替换,`command`结构可以将命令的输出赋值到一个变量中去

11、:冒号:空命令,等价于“NOP”,也可以被认为与shell的内建命令true作用相同

  • 可用在while死循环中,while :

  • 在if/then中的占位符,if XXX ; then : ;else XXX

  • 在一个二元命令中提供一个占位符,: ${username=`whoami`},如果没有开头的":"的话, 将会提示一个错误,除非"username"是一个命令或者内建命令

  • 在here document中提供一个命令所需的占位符

  • 使用参数替换来评估字符串变量,: ${HOSTNAME?} ${USER?} ${MAIL?},如果一个或多个必要的环境变量没被设置的话,就打印错误信息

  • 在与>重定向操作符结合使用时, 将会把一个文件清空, 但是并不会修改这个文件的权限. 如果之前这个文件并不存在, 那么就创建这个文件(: > data.xxx # 文件"data.xxx"现在被清空了)

  • 还可用来在/etc/passwd和$PATH变量中做分隔符

12、!叹号:取反操作符,它将会反转命令的退出码的结果,也会反转测试操作符的意义

13、*星号:

  • 用作通配符,可以用来做文件名匹配

  • 也可以用在正则表达式中,用来匹配任意个数(包含0个)的字符

  • 算数操作符,乘法运算,如果是求幂操作符,就使用**

14、?问号:

  • 测试操作符,在一个特定的表达式中,用来测试一个条件的结果

  • 在一个双括号结构中,?就类似C语言的三元操作符【(( t = a<45?7:11 ))】

  • 在参数替换表达式中,用来测试一个变量是否被设置

  • 可用来做匹配单个字符的通配符,在正则表达式中, 也是用来表示一个字符

15、$:

  • 变量替换,在一个变量前面加上$用来引用这个变量的值

  • 在正则表达式中,表示行结束符

16、${}:参数替换

17、$*, $@:位置参数

18、$?:退出状态码变量,一个命令,一个函数,或者是脚本本身的退出状态码

19、$$:进程ID变量,保存了它所在脚本的进程 ID

20、()小括号:命令组,【(test=xixi ; echo $test)】,在小括号中的命令列表将会作为一个子shell来运行,父shell将不能够读取在子shell中创建的变量

21、(())双小括号:这用于扩展并计算在(( ))中的整数表达式

22、{}大括号:

  • {

  •  echo "haha"

  •  echo "Archive Listing:"

  • } > $file

  • {read line1

  •   read line2

  • } < $file

  • 一个命令可能会对大括号中的以逗号分割的文件列表起作用,mkdir {haha,xixi},注意:在大括号中,不允许有空白,除非这个空白被引用或转义

  • 大括号并命令括起来就组成代码块,实际上就是创建了一个匿名函数,与"标准"函数不同的是, 在其中声明的变量,对于脚本其他部分的代码来说必须是可见的(即不可使用local关键字)

  • 代码块和I/O重定向:从一个文件中读取多个数据到多个变量


  • 还能够将一个代码块的结果保存到文件


23、{} \;:标识路径名,一般都在find命令中使用,其中的";"是用来结束find命令序列的-exec选项

24、[]中括号:

  • 可以是条件测试命令,是一个shell内建命令

  • 在一个array结构的上下文中,中括号用来引用数组中每个元素的编号

  • 可用作正则表达式的一部分,方括号描述一个匹配的字符范围

25、[[ ]]双中括号:也是条件测试命令

26、> &> >& >> < <>:重定向

27、(command)>,<(command):进程替换

28、<<:用在here document中的重定向

29、<<<:用在here string中的重定向

30、\<, \>:正则表达式中的单词边界,grep ‘\<what\>‘ textfile

31、|:管道.,分析前边命令的输出,并将输出作为后边命令的输入

32、>|:强制重定向

33、||:逻辑或

34、&&:逻辑与

35、&:如果在命令后面跟一个&,就表示在后台运行此命令,在脚本中,命令和循环都能够运行在后台中(注意:在一个脚本中,使用后台运行命令(&)可能会使这个脚本挂起,直到敲ENTER,挂起的脚本才会被恢复,一般只有在这个命令的结果需要输出到stdout的时候,这种现象才会出现)

36、-:

  • 选项前缀

  • 用于重定向stdin或stdout【(cd /data/directory && tar cf - . ) | (cd /dest/directory && tar xpvf -)】

  • 表示上一次的工作目录

  • 用于算术操作减号

37、+,=,%:算数运算符

38、~,~+,~-:home目录,当前工作目录,先前工作目录

39、=~:在双中括号测试表达式中使用的正则表达式匹配,[[ "$variable" =~ "T*fin*es*" ]]


-----参考《高级bash脚本编程指南》

本文出自 “逻辑,追求!” 博客,请务必保留此出处http://hjh524.blog.51cto.com/4248253/1565097

bash特殊字符