1. 变量测试与内容替换
变量转换方式 |
变量y没有设置 |
变量y为空值 |
变量y设置值 |
分析 |
x=${y-新值} |
x=新值 |
x为空 |
x=$y |
如何y被设值则x=$y,否则x=新值 |
x=${y:-新值} |
x=新值 |
x=新值 |
x=$y |
如何y值不为空则x=$y,否则x=新值 |
x=${y+新值} |
x为空 |
x=新值 |
x=新值 |
若y被设值则x=新值,否则x为空 |
x=${y:+新值} |
x为空 |
x为空 |
x=新值 |
若y值不为空则x=新值,否则x为空 |
x=${y=新值} |
x=新值,y=新值 |
x为空,y值不变 |
x=$y,y值不变 |
若y被设值则x=$y且y值不变,否则x=新值且y=新值 |
x=${y:=新值} |
x=新值,y=新值 |
x=新值,y=新值 |
x=$y,y值不变 |
若y不为空则x=$y且y值不变,否则x=新值且y=新值 |
x=${y?新值} |
新值输出到标准错误输出(就是屏幕) |
x为空 |
x=$y |
若y被设值则x=$y且y值不变,否则新值输出到标准错误输出(就是屏幕) |
x=${y:?新值} |
新值输出到标准错误输出 |
新值输出到标准错误输出 |
x=$y |
若y不为空则x=$y且y值不变,否则新值输出到标准错误输出(就是屏幕) |
2. 变量替换一
符号 |
含义 |
${var} |
变量,界定范围 |
${var:num} |
返回var中第num个字符到末尾的所有字符,正从左往右,负从右往左,有空格:{var:1-3}或${var:(-2)} |
${var:num1:num2} |
从var的第num1个位置开始,提取长度为num2的子串。num1是位置,num2是长度 |
${var::num1} |
从var的开始位置,提取到num1位置的子串。(正数:从左开始,负数:从右侧开始) |
${var/word1/word2} |
将var中第一个匹配到的word1替换为word2 |
${var//word1/word2} |
将var中所有word1替换为word2 |
3. 变量替换二
定义一个变量定义了一个变量file:
file=/dir1/dir2/dir3/my.file.txt
符号 |
含义 |
${file#*/} |
删掉第一个 / 及其左边的字符串:dir1/dir2/dir3/my.file.txt |
${file##*/} |
删掉最后一个 / 及其左边的字符串:my.file.txt |
${file#*.} |
删掉第一个 . 及其左边的字符串:file.txt |
${file##*.} |
删掉最后一个 . 及其左边的字符串:txt |
${file%/*} |
删掉最后一个 / 及其右边的字符串:/dir1/dir2/dir3 |
${file%%/*} |
删掉第一个 / 及其右边的字符串:(空值) |
${file%.*} |
删掉最后一个 . 及其右边的字符串:/dir1/dir2/dir3/my.file |
${file%%.*} |
删掉第一个 . 及其右边的字符串:/dir1/dir2/dir3/my |