Shell变量拓展
1.模式匹配
${var%pattern}, ${var%%pattern},${var#pattern}, ${var##pattern}
# 是去掉左边
% 是去掉右边
#和%中的单一符号是最小匹配,两个相同符号是最大匹配
2.提取和替换
${var: num}, ${var: num1:num2},只有num1可为负,num1前加空格
${var/pattern/pattern}, ${var//pattern/pattern}
①判断变量a是否包含在变量b
[[ ${a/${b}//} != $a ]] && echo ok
②判断脚本参数是否带-
[[ ${@/-/} != $@ ]] && echo ok
③字符串反转
a=12345;for((i=${#a};i>-1;i–));do echo -n ${a:${i}:1}; done;echo
④批量改文件名
for a in `ls` ;do mv $a ${a/old/new/};done
⑤替换支持通配符
var=‘michaelzeng.tar.gz’; echo ${var1/.t*gz/}
3.变量的默认值处理
使用某变量时最好考虑到其为空或者值为多个的情况
${var:-string} 如果变量为空或未定义,则返回string;否则返回原值
${var:=string} 如果变量为空或未定义,则返回string,并把string值赋值给变量;否则返回原值
${var:+string} 如果变量不为空,则返回string;若为空则返回空值
${var:?string} 如果变量为空或未定义,则string会写入标准错误流,本语句失败;若不为空则返回原值