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个参数即命令本身
  • $?
    :上一条命令的退出码,用来判断命令是否执行成功
  • $_
    :上一条命令的最后一个单词,命令行中与 !$
    相同
  • $@
    :全部参数(数组)
  • **$***:全部参数(字符串)

参考

  1. Advanced Bash-Scripting Guide
  2. Bash 中的特殊字符大全
  3. bash快捷键整理