文章转载自:bash 常见特殊符号及含义
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 个参数即命令本身
- $?:上一条命令的退出码,用来判断命令是否执行成功
- $_:上一条命令的最后一个单词,命令行中与 !$ 相同
- $@:全部参数(数组)
- $*:全部参数(字符串)
参考
- Advanced Bash-Scripting Guide
- Bash 中的特殊字符大全
- bash 快捷键整理