1、简单用法:返回变量的内容
命令 : ${变量} 或者 $变量
2、返回变量的长度
命令:${#变量} // 返回变量长度,字符长度
3、返回变量start数值之后的字符,包括start命令:${变量:start}
4、提取start之后的length限制的字符命令:${变量:start: length}
5、从变量开头删除最短匹配的word子串
命令:${变量#word} // 这里的word,可以用正则表达式匹配,如1*a,1开头a结尾
6、从变量开头,删除最长匹配的word命令:${变量#!#word}
7、 从变量结尾删除最短的word命令:${变量%word}
8、从变量结尾开始删除最长匹配的word命令:${变量%%word}
注意:假如 没有匹配到则原样输出。
替换字符串
9、 单次匹配替换
命令: ${变量/pattern/string} //用string代替第一个匹配的pattern
10、多次匹配替换
命令:${变量//pattern/string} //用string代替所有的pattern
删除文件名案例
1/、准备数据源:在一个目录中创建多个文件
命令: touch zj_{1..5}_file.png
touch zj_{1..5}_file.jgp
2、去掉所有文件的 _file 后缀。
思路1:去掉一个文件的后缀
命令: rm zj_1_file.png zj_1.png
思路2:利用变量的字串的替换功能,去掉后缀
命令: f=zj_1_file.png
echo ${f//_file/}
思路3: 利用反引号功能,反引号可以取得命令执行的结果
命令: mv $f `echo ${f//_file/}`
思路4: 批量修改文件名字,使用for循环
for file in `ls *file*.jgp`;do mv $file `echo ${file//_file/}`;done
//注意 ls *file*.jpg 是查找文件名中间包含file并且.jgp结尾