字符串处理机制
字串截取
phone=18234567890
echo ${#phone} #统计变量长度
11
echo ${phone:0:3}
182
echo ${phone:3:3}
345
echo ${phone:4}
4567890
echo ${phone:4:-2}
45678
子串替换
- 替换1个结果:${变量/旧字串/新字串}
- 替换全部结果:${变量//旧字串/新字串}
phone=18234567890
${phone/8/x}
1x234567890
${phone//8/x}
1x234567x90
字串掐头
- 从左向右,最短匹配删除:${变量#关键词}
- 从左向右,最长匹配删除:${变量##关键词}
- 对变量掐头不会改变变量原有值
echo 'root:x:0:0:root:/root:/bin/bash' > text.txt
A=`head -1 text.txt`
echo $A
root:x:0:0:root:/root:/bin/bash
echo ${A#*:}
x:0:0:root:/root:/bin/bash
echo ${A##*:}
/bin/bash
字串去尾
- 从左向右,最短匹配删除:${变量%关键词}
- 从右向左,最长匹配删除:${变量%%关键词}
- 对变量的操作不会影响原变量的值
echo $A
root:x:0:0:root:/root:/bin/bash
echo ${A%:*}
root:x:0:0:root:/root
echo ${A%%:*}
root
批量修改文件扩展名
touch {a,b,c,d,e,f}.txt
#!/bin/bash
for i in $(ls *.txt)
do
mv $i ${i%.*}.doc
done
#!/bin/bash
for i in $(ls *.$1)
do
mv $i ${i%.*}.$2
done
变量初始化
- 变量有值,则返回该变量的值
- 变量无值,则返回初始值:格式:${变量:-关键词}
echo ${X:-xyz}
123
echo ${ABC:-xyz}
xyz
小结
- ${变量:起始位置:长度}
-
{变量//old/new}
-
{变量%%关键词*}
- ${变量:-关键词}
- 案例