shell特殊变量
变量含义
$0获取当前执行的shell脚本的脚本名字,如果脚本带有路径,那么就包括路径和脚本名称
$n获取当前执行的shell脚本中的第N个参数.但n=1..9时,但n为0时表示脚本的文件名,如果n大于9,那么就需要用大括号括起来,如${10}。
$#获取当前shell命令行中参数的总个数
"$*"所有的位置参数(作为单个字符串) 获取当前shell脚本的所有参数,将所有的的命令行的参数视为一个字符串。
"[email protected]"所有的位置参数(每个都作为独立的字符串) 获取当前shell脚本的所有参数,将所有的的命令行的每个参数视为独立的字符串。
${#*}传递到脚本中的命令行参数的个数
${#@}传递到脚本中的命令行参数的个数
$?获取执行上一个指令的返回值(0为成功值,非0为失败)返回值
$$获取当前执行脚本的进程ID(PID)
$-传递到脚本中的标志(使用set)
$_在此之前执行的命令或脚本的最后一个参数
$!运行在后台的最后一个作业的进程ID(PID)
* 必须被引用起来, 否则默认为"[email protected]".
dirname $0 #获取当前脚本路径
basename $0 #获取当前脚本名称
$* 和 [email protected] 的区别
$* 和 [email protected] 都表示传递给函数或脚本的所有参数,不被双引号(" ")包含时,都以"$1" "$2" … "$n" 的形式输出所有参数。
但是当它们被双引号(" ")包含时,"$*" 会将所有的参数作为一个整体,以"$1 $2 … $n"的形式输出所有参数;"[email protected]" 会将各个参数分开,以"$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