shell-variables

cnblogswww.cnblogs.com/barrychiao/archive/2012/10/22/2733210.html
gnuwww.gnu.org/savannah-checkouts/gnu/bash/manual/bash.html#Shell-Parameter-Expansion

Shell Parameter Expansion

format return and usage
$var 返回变量值,如var="Barry",则$var即是Barry""是界定符,而不是字符串中的字符
${var} 返回变量值,推荐这种写法,代码可读性更好,避免歧义
${#var} 返回字符串长度,如var="Barry",则返回5
${var:start_index} 返回从start_index开始一直到字符串末尾。
var="0123456789"
${var:0}返回0123456789
${var:6}返回6789
${var:0-3}返回789(此处0-3表示从倒数第三个字符开始,即从7开始)
${var:start_index:length} 返回从start_index开始的length个字符。length是要取得的字符串长度,可以为负值。
var=0123456789
${var:2:5}返回23456
${var:5:-2}返回567(此处-2表示剩余两个字符不要)
${var:0-3:-1}返回78
${var#string} 返回从左边删除string后的字符串,尽量短的去匹配。
var="http://127.0.0.1/index.php"
${var#*/}返回/127.0.0.1/index.php
${var##string} 返回从左边删除string后的字符串,尽量长的去匹配。
var="http://127.0.0.1/index.php"
${var##*/}返回index.php
${var%string} 返回从右边删除string后的字符串,尽量短的去匹配。
var="http://127.0.0.1/index.php"
${var%/*}返回http://127.0.0.1
${var%%string} 返回从右边删除string后的字符串,尽量长的去匹配。
var="http://127.0.0.1/index.php"
${var%%/*}返回http:
${var:-newstring} 如果var为空值或未定义,则返回newstring
如果var不为空,则返回原值
${var:=newstring} 如果var为空值或未定义,则返回newstring,并把newstring赋值给var
如果var不为空,则返回原值
${var:+newstring} 如果var不为空则返回newstring
如果var为空则返回空值
${var:?newstring} 如果var为空值或未定义,则将newstring写入标准错误流,本语句失败
如果var不为空则返回原值
${var/substring/newstring} 返回var中第一个substring被替换成newstring后的字符串。
var=088880
${var/0/Barry}返回Barry88880
${var//substring/newstring} 返回var中所有的substring被替换成newstring后的字符串。
var=088880
${var//0/Barry}返回Barry8888Barry
${!var} 变量名的变量
hello="this is some text"; var="hello"
${!var}返回this is some text
$(command) 返回command命令执行后所输出的结果
$(date)返回date命令执行后的输出,相当于date
$((算术表达式)) 返回双括号内算术运算的结果
$((20 + 5 * 6))返回50

Special Parameters

format description
$0 当前脚本的文件名
$num num1开始的数字,$1是第一个参数,以此类推
$# 传入脚本的参数个数
$* 所有的位置参数(作为单个字符串)
$@ 所有的位置参数(每个都作为独立的字符串)
$? 当前shell进程中,上一个命令的返回值
$$ 当前shell进程的pid
$! 后台运行的最后一个进程的pid
$- 显示shell使用的当前选项
$_ 之前命令的最后一个参数