shell特殊变量



变量含义

$0获取当前执行的shell脚本的脚本名字,如果脚本带有路径,那么就包括路径和脚本名称

$n获取当前执行的shell脚本中的第N个参数.但n=1..9时,但n为0时表示脚本的文件名,如果n大于9,那么就需要用大括号括起来,如${10}。

$#获取当前shell命令行中参数的总个数

"$*"所有的位置参数(作为单个字符串) 获取当前shell脚本的所有参数,将所有的的命令行的参数视为一个字符串。

"$@"所有的位置参数(每个都作为独立的字符串) 获取当前shell脚本的所有参数,将所有的的命令行的每个参数视为独立的字符串。

${#*}传递到脚本中的命令行参数的个数

${#@}传递到脚本中的命令行参数的个数

$?获取执行上一个指令的返回值(0为成功值,非0为失败)返回值

$$获取当前执行脚本的进程ID(PID)

$-传递到脚本中的标志(使用set)

$_在此之前执行的命令或脚本的最后一个参数

$!运行在后台的最后一个作业的进程ID(PID)

* 必须被引用起来,          否则默认为"$@".


dirname  $0    #获取当前脚本路径

basename  $0   #获取当前脚本名称


$* 和 $@ 的区别

$* 和 $@ 都表示传递给函数或脚本的所有参数,不被双引号(" ")包含时,都以"$1" "$2" … "$n" 的形式输出所有参数。

但是当它们被双引号(" ")包含时,"$*" 会将所有的参数作为一个整体,以"$1 $2 … $n"的形式输出所有参数;"$@" 会将各个参数分开,以"$1" "$2" … "$n" 的形式输出所有参数。

#############################################################

变量子串

表达式含义

${#string}                   $string的长度 

${string:position}           $string中,从位置$position开始提取子串

${string:position:length}    $string中,从位置$position开始提取长度为$length的子串

${string#substring}          从变量$string的开头,删除最短匹配$substring的子串       

${string##substring}         从变量$string的开头,删除最长匹配$substring的子串       

${string%substring}          从变量$string的结尾,删除最短匹配$substring的子串       

${string%%substring}         从变量$string的结尾,删除最长匹配$substring的子串        

${string/substring/replacement}        使用$replacement,来代替第一个匹配的$substring  

${string//substring/replacement}       使用$replacement,代替所有匹配的$substring       

${string/#substring/replacement}       

    如果$string的前缀匹配$substring,        那么就用$replacement来代替匹配到的$substring


${string/%substring/replacement}

   如果$string的后缀匹配$substring,        那么就用$replacement来代替匹配到的$substring