转义
转义这个概念在很多的编程语言中都有。为什么需要转义呢? 因为某些字符在语言中具有特殊含义,比如 $ * \ &,所以这些字符不能够直接表示出来。
# 会去查找名为 date 的变量
$ echo $date
# 原样显示出 $date 字符串
$ echo \$date
$date
单引号、双引号、反引号
单引号保留字符的字面意思,不是特殊含义
echo '$USER' # 会原样打印出来,而不是查找 USER 的变量值
双引号保留大部分字符的字面意思,但是 $ ` \ 这三个字符依然会被拓展。
echo "$USER" # 会查找 USER 变量
echo "`date`" # 会执行 date 命令
反引号可以用来执行 子命令,如上,但是,官方建议使用 $() 来替代反引号。
echo "$(date)" # 执行 date 命令
变量
Shell 的变量属于随用随声明,声明的时候不需要 $,而调用的时候,需要 $。
aaa="abc"
echo $aaa
特殊变量和环境变量
使用 env 命令可以显示所有的环境变量
系统提前预设了一组特殊变量,用于存储特殊的数据
| 特殊变量 | 含义 |
|---|---|
$? | 上一个命令的返回值 0 表示成功,非 0 失败 |
$$ | 当前 shell 的进程 ID |
$_ | 上一个命令的最后一个参数 |
$! | 最近一个后台异步命令的进程 ID |
$0 | 当前 shell 的名称 |
| $# | 脚本的参数个数 |
| $@ | 脚本的所有参数值 |
| $1 - $9 | 第一个到第九个参数 |
| ${10} | 参数超过9 就要用这种表示 |
let 命令可以在声明变量时,执行算术表达式
let foo=1+2
echo $foo
# 或者
let "foo = 1 + 2"
echo $foo