bash常见特殊符号及含义
2008 年 10 月 25 日
bash命令和shell脚本编程中,一些特殊字符具有特殊含义。不了解的人往往认为其晦涩难懂神秘如符文,而掌握其含义则能在使用过程中起到事半功倍的效果。
本文整理bash命令中 常用
的特殊符号并简要说明其意义,希望对常用bash等shell的人有帮助。文章主要参考tldp的 Advanced Bash-Scripting Guide
,英文不熟悉的网友可查看linux中国删减版的翻译: Bash 中的特殊字符大全
。本文不求全(太多特殊的符号很少用到),更注重 常见易用易懂
的特殊字符(比如 $_
很常用,但上述两个文档中均没有),让读者看完后能迅速上手。
简单的特殊字符
-
!
:最直接的功能是 逻辑非
,最常用的功能是 操作历史命令
(注意此功能不能用在shell编程中)。例如 !!
执行上一条命令, !$
指代上一条命令的最后一个单词, !#
指代执行的整条命令,更多可参考:bash快捷键整理; -
,
:最直接的功能是表达式分隔符,较常见的是用在 ${}
中用于 参数替代
,一个逗号表示首字母小写,两个逗号表示全部小写(bash 4.0版本添加的功能):var=FooBar echo ${var,} # 结果是fooBar echo ${var,,} # 结果是foobar
-
.
:最常见的功能是 当前目录
,有用的功能是代替source
命令,其他功能包括正则表达式中的任意字符 -
:
:空命令(返回0),也常用作PATH等环境变量中的分隔符,神奇的功能是可以作函数名 -
;
:命令分隔符 -
~
: 用户主目录
,代替$HOME环境变量 -
#
:注释符号,也是字符串裁截符 -
&
:让程序放入后台执行,可单独使用,也常配合nohup
一起让程序脱离当前终端 -
/
:文件夹分隔符,单独代表 根目录
,也是除号 - *****:最常用是匹配通配符,也是乘号
- ****:转义或换行
-
–
:常用功能的是命令 短选项
,例如ls -ah
;实用的用法是 单独使用代表前一个目录
,以及取代标准输入输出;也是减号 -
+
:常用在正则表达式中表示至少匹配一次,也是加号 -
|
:管道 -
?
:匹配一个字符,或正则表达式中的0-1次匹配,也是三元运算符 -
..
:上级目录 -
<<
:here-doc -
—
:最常用的是 长选项
符号,神奇的用法是单独使用时代表 后面参数不做解析
,也是递减符号 -
<<<
:here-string,与 <<
的区别是不用手动输入 -
&&, ||
:逻辑与和逻辑或,常用在测试结构或多条命令有条件执行 -
>, >, &&
:输入输出重定向 -
{} \;
:find
命令中与-exec
一起使用,代表文件的绝对路径。注意反斜杆和分号都不能省略
以$开头的特殊字符
$符号除引用变量、执行子命令外,还有许多晦涩但又有用的黑魔法。其经常出现在hell脚本、makefile文件中,因此非常有必要掌握。本节特地选出常见的用法。
-
$$
:当前脚本的进程id -
$!
:上一个后台进程的id -
$#
:参数个数 -
$[0-n]
:第0-n个参数,第0个参数即命令本身 -
$?
:上一条命令的退出码,用来判断命令是否执行成功 -
$_
:上一条命令的最后一个单词,命令行中与 !$
相同 -
$@
:全部参数(数组) - **$***:全部参数(字符串)