Shell中的特殊符号

一直想整理一下 linux 相关的东西,终于能够静下来好好总结一下。
先总结一下之前写 sh 文件的时候,遇到很多符号不是很明白,先列出来到这里。

符号 代表
$$ 运行的 shell 本身的 pid
$! shell 最后运行的命令的后台的pid,也就是脚本上一步执行的命令
$? 最后于行的命令的结束代码,就是返回值
$- 使用set命令设定的flag一览(基本没用过)
$* 所有的参数列表,[$*] 以列表形式输出
$@ 所有的参数列表,与$*相同
$# 添加到 shell 的参数个数
$0 shell 本身的文件名
$1, $2,... shell 的参数|
${$1:-$2} 如果$1不为空则使用$1否则使用$2

接下来是有关${}

符号 代表
${var} 返回var值,var可以是指令
${#var} 返回var的长度
${var:start_index} 返回从start_index之后的值,若为${var:0-x}的形式,则是从倒数第 x 个开始返回到最后
${var:start_index:length} 返回 start_index 之后的length个,若length为负数,表示剩余的length个不要
${var:- new} 如果 var 为空或者未定义,则返回new,否则返回var
${var:= new} 如果 var 为空或者未定义,返回new,否则var赋值为new
${var:+ new } 如果 var 不为空,则返回new, 否则返回var
${var:? new } 若var为空或者未定义,将new写入标准错误中,执行失败,否则返回var
${var/sub/new} 非贪婪正则匹配,匹配var中的第一个sub为new
${var//sub/new} 贪婪正则匹配,匹配v 啊人中所有sub为new
$(command) 返回执行命令后的结果,相当于command
$((eval)) 执行算术表达式
${file#*/} 删掉file中第一个"/"及其左边的字符
${file##*/} 删掉最后一个"/"及其左边的字符
${file#*.} 删掉第一个"."及其左边的字符
${file##*.} 删掉最后一个"."及其左边的字符
${file%/*} 删掉最后一个"/"及其右边的字符
${file%%/*} 删掉第一个"/"及其右边的字符
${file%.*} 删掉最后一个"."及其右边的字符
${file%%.*} 删掉第一个"."及其右边的字符

个人感觉,shell吸收了很多 脚本语言的特性,但是shell更加松散,没有那么严格。
嗯嗯,以上。

你可能感兴趣的:(Shell中的特殊符号)