Bash学习之特殊符号

bash中很多符合都有不同的用处,有一些符号的用法初看极其晦涩,给阅读和写代码带来了不少障碍,今天就系统学习一下这些特殊符号用法。本次阅读的书籍是来自Mendel Cooper的《Advanced Bash-Scripting Guide》,Bash脚本高级进阶。

#号

#号中文念作jing,在英文中经常念作hash或者pound,在一些其他领域念作Sharp。在脚本编程中经常可以看到#作为注释前置符,这也是我们最熟悉的。
下面罗列#的特殊用法:

  1. 作为Bash 脚本的第一行中的#!(这个组合符号念作shebang,这是特殊读法),这个虽然和注释类似,却有实际的功能,用来表示脚本的语法,常见的就是#!/bin/bash
  2. 在变量,sed等工具中做一些特殊用法,比如echo ${PATH#*:},用来截取字符串
  3. #做为一个特殊的字符,在字符串中大部分不需要转义,除了下面的例子:
    echo The \# here does not begin a comment.
    echo The # here begins a comment.

上的例子之所要转义是因为没有被引号包围,被引号包围的#是不会把后面的内容当做注释的。写到这里,我已经转义了不少#号了(markdown也需要转义)。

;分号

分号(semicolon)将连个命令表示在同一行,注意分号后面要有空格,最经典的就是if语句中then前面的那个空格。
;;双分号用于case语句中一个选项的结束。

case "$variable" in
abc) echo "\$variable = abc" ;;
xyz) echo "\$variable = xyz" ;;
esac

.点号

.(念作dot)这个符号出现的频率比较高,下面罗列它的一些用法。

  1. 作为一个命令,就是source的缩写,和source用法一致
  2. 作为文件名的一部分,如果在开头,表示隐藏文件,如果在中间,则往往用于区分后缀等。
  3. 在文件夹目录中,.表示当前目录,..表示上级目录
  4. 在正则表达式中用于表示任意单个字符

“双引号

引用一个字符串,但是在这个字符串中很多特殊字符都会有特殊作用,不会进行转义。最常见的就是$表示的变量。

‘单引号

和双引号相比最大的区别就是它回转义大部分特殊字符,即大部分都会所见即所得,不会有任何转换。

,逗号

表示一系列操作,但是只有最后一个返回值。其他时候常常用于数组

` 反引号

反引号常常用于一串命令的输出作为一个变量

:冒号

冒号在Bash中表示什么都不做,但是它的返回值总是0(true),常常用于占位符,也用于下面的用法:

: > data.xxx # File "data.xxx" now empty.
# Same effect as cat /dev/null >data.xxx
# However, this does not fork a new process, since ":" is a builtin.

和cat /dev/null类似,但是更快

[]中括号

中括号常常表示test指令,用于if-then语句。当然也能用于数组索引,区别就在于中间有没有空格。

|竖线符号

竖线在Bash中表示管道,管道是Bash的经典语法

还有其他符号诸如%,$,&等就不再赘述了,其用法相对固定。