69

bash常见特殊符号及含义 - tlanyan

 4 years ago
source link: https://www.tlanyan.me/special-chars-in-bash/?
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

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

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK