Shell脚本攻略:${ }获取文件名和后缀

news/2025/1/8 19:50:43/

目录

一、理论

1. ${ }分别替换得到不同的值

2. ${ } 可针对不同的变数状态赋值(沒设定、空值、非空值)

二、实验

1.打印文件名和后缀名

2.${}分别替换


一、理论

1. ${ }分别替换得到不同的值

# 是 去掉左边(键盘上#在 $ 的左边);

%是去掉右边(键盘上% 在$ 的右边);

单一符号是最小匹配;两个符号是最大匹配;

*是需要删除那边就放在哪边。

表1 ${ }替换

替换功能

${file#*/}
删掉第一个 / 及其左边的字符串
${file##*/}删掉最后一个 /  及其左边的字符串
${file#*.}
删掉第一个 .  及其左边的字符串
${file##*.}删掉最后一个 .  及其左边的字符串
${file%/*}删掉最后一个  /  及其右边的字符串

${file%%/*}
删掉第一个 /  及其右边的字符串
${file%.*}删掉最后一个  .  及其右边的字符串
${file%%.*}删掉第一个  .   及其右边的字符串

2. ${ } 可针对不同的变数状态赋值(沒设定、空值、非空值)

表2  ${ }状态赋值

状态赋值
${file-my.file.txt}假如 $file 沒有设定,则使用 my.file.txt 作传回值。(空值及非空值时不作处理) 
${file:-my.file.txt}假如 $file 沒有设定或为空值,则使用 my.file.txt 作传回值。 (非空值时不作处理)
${file+my.file.txt}假如 $file 设为空值或非空值,均使用 my.file.txt 作传回值。(沒设定时不作处理)
${file:+my.file.txt}若 $file 为非空值,则使用 my.file.txt 作传回值。 (沒设定及空值時不作处理)
${file=my.file.txt} 若 $file 沒设定,则使用 my.file.txt 作传回值,同时将 $file 赋值为 my.file.txt 。 (空值及非空值时不作处理)
${file:=my.file.txt} 若 $file 沒设定或为空值,则使用 my.file.txt 作传回值,同時将 $file 赋值为my.file.txt 。 (非空值时不作处理)
${file?my.file.txt}若 $file 沒设定,则将 my.file.txt 输出至 STDERR。 (空值及非空值時不作处理)
${file:?my.file.txt}若 $file 没设定或为空值,则将 my.file.txt 输出至 STDERR。 (非空值時不作处理)
${#var}可计算出变量值的长度

二、实验

1.打印文件名和后缀名

(1)变量赋值

[root@centos2 /]# file=test.tar

(2)打印文件名

[root@centos2 /]# echo ${file%.*}
test

(3)打印后缀名

[root@centos2 /]# echo ${file##*.}
tar

2.${}分别替换

(1)变量赋值

[root@centos2 /]# file=/abc1/abc2/abc3/my.file.txt

(2)删掉第一个 / 及其左边的字符串

[root@centos2 /]# echo ${file#*/}
abc1/abc2/abc3/my.file.txt

(3)删掉最后一个 /  及其左边的字符串

[root@centos2 /]# echo ${file##*/}
my.file.txt

(4)删掉第一个 .  及其左边的字符串

[root@centos2 /]# echo ${file#*.}
file.txt

(5)删掉最后一个 .  及其左边的字符串

[root@centos2 /]# echo ${file##*.}
txt

(6)删掉最后一个  /  及其右边的字符串

[root@centos2 /]# echo ${file%/*}
/abc1/abc2/abc3

(7)删掉第一个 /  及其右边的字符串:(空值)

[root@centos2 /]# echo ${file%%/*}

(8)删掉最后一个  .  及其右边的字符串

[root@centos2 /]# echo ${file%.*}
/abc1/abc2/abc3/my.file

(8)删掉第一个  .   及其右边的字符串

[root@centos2 /]# echo ${file%%.*}
/abc1/abc2/abc3/my


http://www.ppmy.cn/news/348632.html

相关文章

故事:棒球梦想·棒球7号位

棒球是一项极富竞技性和挑战性的运动,它需要球员们具备高度的技术水平,强健的体魄和坚定的意志力。对于我来说,棒球不仅是一种运动,更是我人生中最珍贵的梦想之一。 小时候,我对棒球就有着浓厚的兴趣。每当我看到电视上…

【头歌-Python】9.1 X射线衍射曲线绘制(project)第3~4关

第3关:X 射线衍射曲线峰值 任务描述 本关任务:读文件中的数据绘制线图形并加绘制峰值。 相关知识 为了完成本关任务,你需要掌握: python 读取文件中的数据使用 matplotlib 绘制图形 python 读取文件 python读取文件可以用以…

【C++】是内存管理,但C++ !! 模板初阶

目录 一,回望C语言内存 二, C 内存管理方式 1. 内置类型 2. 自定义类型 3. new & malloc 返回内容区别 4. operator new & operator delete 5. malloc/free和new/delete的区别总结 6. 定位new表达式(placement-new) (了…

AOC U2790PQU 评测

这款显示器的分辨率同样为4K,除了浏览照片和进行后期调色外,制图、剪辑视频时,都能获得更为清晰、锐利的细节,而IPS面板本身的广视角特性也几乎让使用者能够从任何一个角度看清屏幕。 AOC U2790PQU怎么样这些点很重要 http://www.…

AOC有什么用

AOC是 "Active Optical Cable" 的缩写,它是一种光学电缆,可以将视频、数据和音频信号以光纤的形式传输。这种电缆的优点是传输速度快、传输距离远、信号传输稳定、耐用性好,适用于各种高清视频传输应用。

计算机屏幕很暗怎么办,如果aoc显示屏的亮度很暗怎么办

有时候我们的aoc监视器很暗,我们该怎么办?让我们向编辑学习,为深色aoc显示器提供一个简单的解决方案!希望你喜欢它! 黑暗aoc显示的解决方案: 打开控制面板,然后单击“系统和安全性”. 单击以更改电池设置. …

Django实现接口自动化平台(八)测试报告reports序列化器及视图【持续更新中】

上一章: Django实现接口自动化平台(七)数据库设计_做测试的喵酱的博客-CSDN博客 下一章: 官方文档: Serializers - Django REST framework 一、测试报告reports序列化器及视图 1.1 序列化器 apps/reports/serial…

一文讲透彻!RobotFramwork测试框架教程(全能)

Robot Framwork在业界早已名声大振!有很多刚学自动化测试的伙伴问我:有没有不需要编程就可以玩自动化的方法? 有吗?有的!——Robot Framwork 我们今天就一篇文章,把它讲得明明白白! 一、Robo…