关于${ }的用法-Linux shell编程小记
1.替换、裁剪
在shell编程中,当遇到需要将某个字符串进行替换或者裁剪时,我们首先想到的是sed和awk,但是sed和awk的功能都太强大了,当只是简单的对某个字符串进行替换裁剪时,我们可以使用${}来完成。
替换
替换的格式为 ${变量/|//被替换字符/替换字符}
file=/home/test/test.sh
#将第一个test替换为tty1
filename=${file/test/tty1}
#将所有的test替换为tty1
filename=${file//test/tty1}
裁剪
裁剪的格式为${变量#(##)|%(%%)正则表达式}
#删除第一个/左边的所有字符
filename=${file#*/}
#删除第一个/右边的所有字符
filename=${file%/*}
#删除最后一个/左边所有字符
filename=${file##*/}
#删除最后一个/右边所有字符
filename=${file%%/*}
例子中/可以按照实际要求更换,例如
#删除第一个.左边的字符
filename=${file#*.}
如果字符串有规律,只需要输出固定位置的字符串,可以使用${变量:起始位置:长度}
#取出字符串第3-7个字符
filename=${file:2:4}
echo ${filename}
#>ome/
有个小技巧,在你无法分辨左右与符号对应时,可以看看键盘
#在$的左边,所以是删除分隔符左边的内容;%在$的右边,所以是删除分隔符右边的内容
2.针对不同状态赋值
在编程时,如果用户没有在要求位置输入内容或在运行中某个变量没有获取到值,可能会造成脚本出现停止或其他错误,所以在编程时需要对一些变量进行限制。
表达式 |
没设定 |
空值 |
非空值 |
${file-host} |
使用host作传回值 |
不处理 |
不处理 |
${file:-host} |
使用host作传回值 |
使用host作传回值 |
不处理 |
${file=host} |
使用host作传回值且将file赋值为host |
不处理 |
不处理 |
${file:=host} |
使用host作传回值且将file赋值为host |
使用host作传回值且将file赋值为host |
不处理 |
${file?host} |
將host輸出至STDERR |
不处理 |
不处理 |
${file:?host} |
將host輸出至STDERR |
將host輸出至STDERR |
不处理 |
${file+host} |
不处理 |
使用host作传回值 |
使用host作传回值 |
${file:=host} |
不处理 |
不处理 |
使用host作传回值 |
针对不同要求,可以选择不同的表达式对值进行控制,来保证变量的值。
3.计数
通过${#变量}可以对变量的长进行计数:
echo ${#file}
#>18
#因为file总共有18个字符