假设我们定义了一个变量为:
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中 ${}, ##, %%, :-,:+, ? 的使用的更多相关文章

  1. linux shell中的&& || 和()

    1. linux命令返回值介绍 shell 在执行某个命令时,会有一个返回值,该值保存在shell变量$?中.当$?为0时,表示命令执行成功:当$?为1时,表示命令执行失败. 2. && ...

  2. shell 中 2>&1 的使用

    一 相关知识 1)默认地,标准的输入为键盘,但是也可以来自文件或管道(pipe |). 2)默认地,标准的输出为终端(terminal),但是也可以重定向到文件,管道或后引号(backquotes ` ...

  3. shell中read使用

    (1) 下面的语句从输入中读取n个字符并存入变量variable_name: read -n number_of_chars variable_name例如:[root@host1 shell]# r ...

  4. shell 中的 && 和 ||

    shell 中的 && 和 || 简言之,shell 中 && --左边的命令执行成功才会执行右边的命令. || -- 左边的命令执行失败才会执行右边的命令.

  5. shell中的$* $@

    shell中$*与$@的区别 关于$* 和 $@的 一点 认识 同是菜鸟一起学习 $* 所有的位置参数,被作为一个单词. 注意:"$*"必须被""引用. $@ ...

  6. shell 中的<,<<,>,>>

    相信熟悉linux的童鞋不会对这四个符合陌生,shell脚本的文件流有时候真的挺容易搞晕人的,下面我们一起了解一下吧 参考链接:http://www.cnblogs.com/chengmo/archi ...

  7. shell中的wait

    cat test1 | uniq > newtest1 & cat test2 | uniq > newtest2 & wait diff newtest1 newtest ...

  8. Linux shell中处理

        awk是行处理器: 相比较屏幕处理的优点,在处理庞大文件时不会出现内存溢出或是处理缓慢的问题,通常用来格式化文本信息 awk处理过程: 依次对每一行进行处理,然后输出 awk命令形式: awk ...

  9. shell中${}的使用

    1. 截断功能${file#*/}:       拿掉第一条/及其左边的字符串:dir1/dir2/dir3/my.file.txt${file##*/}:    拿掉最后一条/及其左边的字符串:my ...

  10. shell中test的使用

    #/secondin/secondfirstshecho “please enter two numseconder”read firstread secondif test $first -eq $ ...

随机推荐

  1. 前端导出excel文件,后端返回二进制文件 application/octet-stream 前端处理数据并下载excel文件

    通过URL.createObjectURL(blob)可以获取当前文件的一个内存URL const href = URL.createObjectURL(res.data); const box = ...

  2. element的图片上传预处理函数

    /** 图片格式和大小的控制 */ beforeAvatarUpload (file) { // 允许上传 jpg 和 png 格式的图片 const isJPG = file.type === &q ...

  3. 创建一个简单的基于MyBatis的项目

  4. 61.null和undefined的区别

    null 是空指针,用来保存准备使用的对象,但是现在还没有,用来占位 : undefined 是未定义,是声明了变量但是没有初始化 :

  5. KubeSphere 社区双周报|2024.04.26-05.09

    KubeSphere 社区双周报主要整理展示新增的贡献者名单和证书.新增的讲师证书以及两周内提交过 commit 的贡献者,并对近期重要的 PR 进行解析,同时还包含了线上/线下活动和布道推广等一系列 ...

  6. 接口自动化框架【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 ...

  7. Taro首个支持鸿蒙的 UI 库,同时还兼容 React Native、小程序、H5

    Taro 4.0 已经推出一段时间了,4.0 版本主要是支持了鸿蒙端的开发以及 Vite 编译工具的支持.duxapp 在这段时间也跟随 Taro 的脚步,实现的对鸿蒙端的支持,并且也将之前的 dux ...

  8. 奥迪借助Karpenter为关键业务节省63%成本

    原文链接: https://aws.amazon.com/cn/solutions/case-studies/audi-efficient-compute-case-study/ 翻译:cloudpi ...

  9. 黑盒视角下的RESTful API安全测试

    目录 前言 关于OWASP API TOP 10 REST API接口测试思路 接口权限测试 接口校验测试 接口滥用测试 总结 前言 RESTful API(或称RESTful Web API)在线开 ...

  10. XSS跨站脚本之portswigger labs练习

    目录 1 什么是XSS 2 XSS的类型有哪些 3 XSS攻击的过程和原理 4 XSS的防御 5 可能会用到的XSS Payload资源 6 靶场训练 portswigger labs 6.1 没有任 ...