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 $ ...
随机推荐
- wpf之样式
在Window.Resources中书写样式 : <Window.Resources> <Style TargetType="Button" > </ ...
- 40. diff 的新旧节点数组如何比较
根据唯一标识符key值,把新旧的节点比较,不同就更新到新节点,相同就复用就节点,然后生成新的 Vnode :
- 云原生爱好者周刊:Dapr 成为 CNCF 孵化项目
云原生一周动态要闻: Dapr 加入 CNCF 孵化器 Knative 1.0 发布 Canonical 开始提供针对 Intel CPU 优化的 Ubuntu 图像 Longhorn 为 CNCF ...
- Java中List 删除元素
在Java中,使用List时想要删除某个特定个元素怎么办?很好办!因为List接口有remove()这个方法,我们只需要调用remove()方法,就可以删除list中的某个元素.但是list自带的有一 ...
- NES 系统架构
主机 NES(FC.红白机.小霸王)的系统架构可用下图表示: 系统中最核心的组件是 CPU,其它组件都可以算作 CPU 的外设.CPU 的外设包括:PPU(图像处理器).APU(音频处理器).WRAM ...
- 低功耗4G模组:Air780EP之fskv开发示例
今天我们学习合宙低功耗4G模组Air780EP的fskv开发示例. 一.简介 兼容fdb的函数 使用fdb的flash空间,启用时也会替代fdb库 功能上与EEPROM是类似的 fskv与fdb的 ...
- AI智能学生体测小程序解决方案
引言: 近年来,随着教育理念的提升,对学生综合素质的教育越发重视,特别是越发重视学生的身体素质提升,各阶段的升学考试也将体测纳入考核范围.学校也推出了各种体测锻炼促进手段,今天为您介绍一个基于小程序的 ...
- po文件如何转为excel
其实.po文件是一种翻译文件格式,类似于 key - value的列表 可以理解为两列,由于我们想把这个po数据读出来放入 excel.因为大部分人看不懂po文件的.虽然我们可以借助工具 poedit ...
- Polly+HttpClientFactory
Polly 在.Net Core中有一个被.Net基金会认可的库Polly,它一种弹性和瞬态故障处理库,可以用来简化对服务熔断降级的处理. Polly的策略主要由"故障"和&quo ...
- Java Timer&TimerTask原理分析
如果你使用Java语言进行开发,对于定时执行任务这样的需求,自然而然会想到使用Timer和TimerTask完成任务,我最近就使用 Timer和TimerTask完成了一个定时执行的任务,实现得没有问 ...