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 |