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 $ ...
随机推荐
- ByConity与主流开源OLAP引擎(Clickhouse、Doris、Presto)性能对比分析
引言: 随着数据量和数据复杂性的不断增加,越来越多的企业开始使用OLAP(联机分析处理)引擎来处理大规模数据并提供即时分析结果.在选择OLAP引擎时,性能是一个非常重要的因素. 因此,本文将使用TPC ...
- Required request parameter ‘xxx‘ for method parameter type xxxx is not present 解决方式
我在controller层传实体参数时加了@RequestParam,结果报Required request parameter 'pointlist' for method parameter ty ...
- 云原生周刊:Argo Rollouts 支持 Kubernetes Gateway API 1.0 | 2024.7.1
开源项目 Kubetools Recommender System Kubetools Recommender System (Krs) 是一个基于 GenAI 的工具,用于帮助管理和优化 Kuber ...
- Linux 7安装Mysql5.7版本
Mysql 5.7的安装搭建 首先去到官方网站的下载链接中找到对应你Linux服务器版本的mysql软件包 https://dev.mysql.com/downloads/repo/yum/ 我使用的 ...
- iceoryx源码阅读(五)——共享内存通信(三)
目录 1 正常的消息接收流程 1.1 SubscriberImpl::take 1.2 BaseSubscriber<port_t>::takeChunk 1.3 SubscriberPo ...
- 推荐一个 ASP.NET Core 的轻量级插件框架
前言 本文将介绍一个专为ASP.NET Core设计的轻量级插件框架--PluginCore,该框架不仅能够简化插件的开发与集成,还能大幅提高开发效率. 另外,还将简要介绍相关的前端技术和SDK支持, ...
- c++11新增内容
记录一下c++11新特性方便以后回忆 1.nullptr (对标NULL) 2.auto ,decltype(根据表达式推断类型,表达式不执行) decltype(func()) sum = 5; / ...
- 一款WPF开发的B站视频下载开源项目
更多开源项目请查看:一个专注推荐优秀.Net开源项目的榜单 今天给推荐一款C#开发的.界面简洁的哔哩哔哩视频下载工具. 项目简介 这是一款基于WPF开发的,B站下载工具,操作界面简洁,支持多线程下载. ...
- Excel 导入解析数据 NPOIExcelHelper
前端代码 html <link href="~/lib/bootstrap-fileinput/css/fileinput.min.css" media="all& ...
- 【THUPC 2024 初赛】 E 转化
[THUPC 2024 初赛] 转化 我都能做出来,那就是大水题了. 思路 首先我们要确定最大可以变色的球的数量 \(tot\). 有如下两个贪心步骤: 所有颜色使用分裂操作,并更新 \(a_i\). ...