shell中 ${}, ##, %%, :-,:+, ? 的使用
假设我们定义了一个变量为:
file=/dir1/dir2/dir3/my.file.txt
可以用${}分别替换得到不同的值:
${file#*/} 删掉第一个/及其左边的字符串:dir1/dir2/dir3/my.file.txt
${file##*/} 删掉最后一个/及其左边的字符串:my.file.txt
${file#*.} 删掉第一个.及其左边的字符串:file.txt
${file##*.} 删掉最后一个.及其左边的字符串:txt
${file%/*} 删掉最后一个/及其右边的字符串:/dir1/dir2/dir3
${file%%/*} 删掉第一个/及其右边的字符串:(空值)
${file%.*} 删掉最后一个.及其右边的字符串:/dir1/dir2/dir3/my.file
${file%%.*} 删掉第一个.及其右边的字符串:/dir1/dir2/dir3/my
记忆的方法为:
# 是去掉左边(键盘上#在$的左边)
% 是去掉右边(键盘上%在$的右边)
单一符号是最小匹配;两个符号是最大匹配
${file:0:5}: 提取最左边的5 个字节:/dir1
${file:5:5}: 提取第5 个字节右边的连续5个字节:/dir2
也可以对变量值里的字符串作替换:
${file/dir/path} 将第一个dir替换为path:/path1/dir2/dir3/my.file.txt
${file//dir/path} 将全部dir替换为path:/path1/path2/path3/my.file.txt
利用${}还可针对不同的变数状态赋值(没设定、空值、非空值):
${file-my.file.txt} :假如$file没有设定,则使用my.file.txt作传回值。(空值及非空值时不作处理)
${file:-my.file.txt} :假如$file没有设定或为空值,则使用my.file.txt作传回值。(非空值时不作处理)
${file+my.file.txt} :假如$fil设为空值或非空值,均使用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} 可计算出变量值的长度:
${#file} 可得到27 ,因为/dir1/dir2/dir3/my.file.txt 是27个字节
shell中 ${}, ##, %%, :-,:+, ? 的使用的更多相关文章
- linux shell中的&& || 和()
1. linux命令返回值介绍 shell 在执行某个命令时,会有一个返回值,该值保存在shell变量$?中.当$?为0时,表示命令执行成功:当$?为1时,表示命令执行失败. 2. && ...
- shell 中 2>&1 的使用
一 相关知识 1)默认地,标准的输入为键盘,但是也可以来自文件或管道(pipe |). 2)默认地,标准的输出为终端(terminal),但是也可以重定向到文件,管道或后引号(backquotes ` ...
- shell中read使用
(1) 下面的语句从输入中读取n个字符并存入变量variable_name: read -n number_of_chars variable_name例如:[root@host1 shell]# r ...
- shell 中的 && 和 ||
shell 中的 && 和 || 简言之,shell 中 && --左边的命令执行成功才会执行右边的命令. || -- 左边的命令执行失败才会执行右边的命令.
- shell中的$* $@
shell中$*与$@的区别 关于$* 和 $@的 一点 认识 同是菜鸟一起学习 $* 所有的位置参数,被作为一个单词. 注意:"$*"必须被""引用. $@ ...
- shell 中的<,<<,>,>>
相信熟悉linux的童鞋不会对这四个符合陌生,shell脚本的文件流有时候真的挺容易搞晕人的,下面我们一起了解一下吧 参考链接:http://www.cnblogs.com/chengmo/archi ...
- shell中的wait
cat test1 | uniq > newtest1 & cat test2 | uniq > newtest2 & wait diff newtest1 newtest ...
- Linux shell中处理
awk是行处理器: 相比较屏幕处理的优点,在处理庞大文件时不会出现内存溢出或是处理缓慢的问题,通常用来格式化文本信息 awk处理过程: 依次对每一行进行处理,然后输出 awk命令形式: awk ...
- shell中${}的使用
1. 截断功能${file#*/}: 拿掉第一条/及其左边的字符串:dir1/dir2/dir3/my.file.txt${file##*/}: 拿掉最后一条/及其左边的字符串:my ...
- shell中test的使用
#/secondin/secondfirstshecho “please enter two numseconder”read firstread secondif test $first -eq $ ...
随机推荐
- 前端导出excel文件,后端返回二进制文件 application/octet-stream 前端处理数据并下载excel文件
通过URL.createObjectURL(blob)可以获取当前文件的一个内存URL const href = URL.createObjectURL(res.data); const box = ...
- element的图片上传预处理函数
/** 图片格式和大小的控制 */ beforeAvatarUpload (file) { // 允许上传 jpg 和 png 格式的图片 const isJPG = file.type === &q ...
- 创建一个简单的基于MyBatis的项目
- 61.null和undefined的区别
null 是空指针,用来保存准备使用的对象,但是现在还没有,用来占位 : undefined 是未定义,是声明了变量但是没有初始化 :
- KubeSphere 社区双周报|2024.04.26-05.09
KubeSphere 社区双周报主要整理展示新增的贡献者名单和证书.新增的讲师证书以及两周内提交过 commit 的贡献者,并对近期重要的 PR 进行解析,同时还包含了线上/线下活动和布道推广等一系列 ...
- 接口自动化框架【python+requests+pytest+allure】需要安装的依赖包
attrs == 23.2.0 certifi == 2024.2.2 cffi == 1.16.0 charset-normalizer == 3.3.2 colorama == 0.4.6 cry ...
- Taro首个支持鸿蒙的 UI 库,同时还兼容 React Native、小程序、H5
Taro 4.0 已经推出一段时间了,4.0 版本主要是支持了鸿蒙端的开发以及 Vite 编译工具的支持.duxapp 在这段时间也跟随 Taro 的脚步,实现的对鸿蒙端的支持,并且也将之前的 dux ...
- 奥迪借助Karpenter为关键业务节省63%成本
原文链接: https://aws.amazon.com/cn/solutions/case-studies/audi-efficient-compute-case-study/ 翻译:cloudpi ...
- 黑盒视角下的RESTful API安全测试
目录 前言 关于OWASP API TOP 10 REST API接口测试思路 接口权限测试 接口校验测试 接口滥用测试 总结 前言 RESTful API(或称RESTful Web API)在线开 ...
- XSS跨站脚本之portswigger labs练习
目录 1 什么是XSS 2 XSS的类型有哪些 3 XSS攻击的过程和原理 4 XSS的防御 5 可能会用到的XSS Payload资源 6 靶场训练 portswigger labs 6.1 没有任 ...