学习一下 shell 里面的特殊符号, 和变量的命名规则

bash中其他特殊符号

1
2
3
4
5
6
7
8
9
10
11
12
符号            作用
'' 单引号。在单引号中所有的特殊符号,如"$" 和 "`" (反引号) 都没有特殊含义
"" 双引号。在双引号中特殊符号都没有特殊含义,但是"$"(调用变量的值) , "`"(调用命令) 和 "\"(转义符)
`` 反引号. 反引号括起来的内容是系统命令, 在Bash中会先执行它. 和 $() 作用一样, 不过,推荐使用 $() , 因为反引号 看起来不容易看.
$() 和反引号作用一样, 用于引用系统命令
() 用于一串命令执行时, () 中的命令会在子shell中运行.
{} 用于一串命令执行时, {}中的命令会在当前shell 中执行, 也可以用于变量变形与替换
[] 用于变量的测试
# 在shell 脚本中, #开头的行代表注释
$ 用于调用变量的值, 比如 $name , 就是调用变量name的值


注意事项

1
2
3
在单引号中, 所有的特殊符号都没有特殊含义.
在双引号中, 如 "$" , "" , "\" 都保留特殊含义.
`` 号和 $() 的 作用一样, 都是用来引用系统命令, 一般都是使用 $()

小括号,中括号和大括号

父shell 和 子shell

1
2
3
4
5
在我们bash 中, 是可以调用新的bash 的. 对于新调用的bash ,就是子shell , 而调用它的就是父shell .
可以自己去操作试试, 输入bash , 再输入 pstree



使用注意

1
2
3
4
子shell 是自己开启了一个进程, 在它的进程里修改了name的值,但是它的父进程里的name 值并没有被子shell给改.

在实际工作中, 除非很特殊的需求, 一般也很少 用 (命令) 去开一个子shell
而且 { } 是在当前shell 执行, 并且第一个命令和左边括号直接必须有一个空格 and 最后一个命令要用分号, 因此我们一般也不用它, 直接在当前shell 里执行命令即可.

小括号和大括号的区别

1
2
3
4
5
6
7
8
9
10
11
12
13
如果是用于一串命令的执行, 小括号和大括号的主要区别在于:
()执行一串命令时, 需要重新开一个子shell 进行执行
{}执行一串命令时, 在当前shell 进行执行
()和{} 都是把一串命令放在括号里, 并且命令之间用 ; 隔开
() 最后一个命令可以不用分号
{} 最后一个命令要用分号

() 里的命令不必和括号有空格
{}里的第一个命令必须和左括号之间有空格

()和{}中括号里面的某个命令的重定向只影响该命令, 但括号外的重定向则影响括号里的所有命令


shell的变量命名规则

1
2
3
4
5
6
7
8
9
变量名不能以数字开头, 可以由字母, 数字和下划线组成.
变量用等号连接值, 登号左右两侧不能有空格.
变量的值里如果有哦你哥哥, 需要用单引号或者双引号包起来.
在bash中, 变量的默认类型都是字符串类型.
在变量的值中, 可以使用"\" 转义符.
变量用等号连接值, 等号两边不能有空格. 这是因为在linux 中, 如果有了空格,就会当成命令, 空格后的就是命令的参数.
对变量值的叠加,方法是 "$varname"value_add , 如 test="$test"456
把命令的结果作为变量赋予变量, 用 变量=$(命令) , 如test=$(date)
环境变量名建议大写, 便于 区分