$() 和``的作用一样,都是把命令的结果输出
$[]和$(())可以引用变量,可以在里面做算术运算
${}
$0表示脚本名
$1位置变量1
$#变量的个数
$@ 或 $* 变量的成员
shell中变量默认只有全局作用域
shell的间接引用值
巧用heredocs
连续创建10个文件 touch 00{1..10}.file
读取当前脚本的路径:script_dir=$(cd $(dirname $0) && pwd)
会使用trap捕获信号,并在接受到终止信号时执行一些收尾工作(trap "commands" SIG #当触发某种信号时执行命令)
读取文件时不要使用for loop而要使用while read
尽量使用func(){}来定义函数,而不是func{}
尽量使用[[]]来代替[]
尽量使用$()将命令的结果赋给变量,而不是反引号
在复杂的场景下尽量使用printf代替echo进行回显
( command1; command2; command3; ... )圆括号中命令列表的命令将会运行在一个子shell中.
子shell中的变量对于子shell之外的代码块来说, 是不可见的. 当然, 父进程也不能访问
这些变量, 父进程指的是产生这个子shell的shell. 事实上, 这些变量都是局部变量.
每个shell脚本都有效地运行在父shell的一个子进程中
变量的间接引用 eval var1=$$var2 或者${!variable}
${vars?} 如果其中某个变量没被设置, 那么就打印错误信息.
set命令用来修改内部脚本变量的值. 它的一个作用就是触发选项标志位来帮助决定脚本的行为.
另一个作用是以一个命令的结果(set command
)来重新设置脚本的位置参数. 脚本将会从命令的
输出中重新分析出位置参数.
每次shift都会前进选取下一个参数
参考:https://blog.mythsman.com/2017/07/23/1/