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: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 |