`
dengqsintyt
  • 浏览: 288609 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

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} :假如$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} 可计算出变量值的长度:

${#file} 可得到27 ,因为/dir1/dir2/dir3/my.file.txt 是27个字节

 

分享到:
评论

相关推荐

    shell 特殊符号含义

    整理常见的shell特殊符号的含义及应用

    shell中条件判断if中的-a到-z的意思

    详细描述了shell脚本中,if判断文件时用到字母参数的含义,,以及逻辑判断的意义如:-nt/-ot/-ef等等

    UPX Shell 3.4.2.2010

    UPX Shell 是 UPX 的图形界面程序,并且增强了 UPX 的功能,使用更加方 便。原版程序已内置了 UPX 1.25、UPX 2.03 和 UPX 2.92b 压缩引擎模块,现 UPX 3.02 压缩引擎发布已久,却迟迟不见 UPX Shell 的更新。虽然将...

    shell脚本调试技术

    详细介绍了shell脚本的调试技术,对编写shell时很有指导意义

    Unix Shell编程(第三版)

    本书是UnixShell编程方面的经典书籍。第3版以Unix Shell的最新POSIX标准Shell为主线,同时,在必要的情况下,及时指出与其他流行Shell的区别,因此,本书对其他版本Shell的编程也具有重要的借鉴意义。

    shell中正则表达式的理解与使用

    shell中正则表达式的理解与使用1. 什么是正则表达式2. 为什么要学习正则表达式3. 正则表达式数据处理过程4. 基本的正则表达式元字符集合及其意义 1. 什么是正则表达式 linux shell以一串字符作为表达式向系统传达...

    functional-shell:使用链表和高阶函数在 Bash 中进行函数式编程

    不过,它的目标是正确/精确/安全和高效,除了一个很大的常数因素(在时间和空间上,与其他函数式语言实现相比)。 (但它还没有完成,请参阅 Todo。) 这(当前)使用 Bash。 尽管大多数函数/命令是作为 bash 脚本...

    shell脚本:自动部署rocketmq阿里巴巴消息队列阿帕奇消息队列

    #传这个test参数的意义是将消息队列服务器最低要求内存改成128m,保证服务器可以启动起来 #测试机部署第一台的命令: sh auto_cfg_rmq.sh 0 test #测试机部署第二台的命令: sh auto_cfg_rmq.sh 1 test

    UPX Shell (整合 UPX 3.08)

    UPX Shell 是 UPX 的图形界面程序,并且增强了 UPX 的功能,使用更加方 便。原版程序已内置了 UPX 1.25、UPX 2.03 和 UPX 2.92b 压缩引擎模块,现 UPX 3.02 压缩引擎发布已久,却迟迟不见 UPX Shell 的更新。虽然将...

    论文研究-一种基于改进K-shell的节点重要性排序方法.pdf

    对复杂网络中节点的重要性进行排序在理论和现实中都有着重要的意义。传统K-shell分解方法有着排序结果分辨率不高的缺陷,针对这一问题,提出了一种改进的K-shell方法,通过利用K-shell分解过程中节点被删除时的迭代...

    一系列文档和参考实现,重点介绍如何将各种技术组合成有意义的医疗保健模式-Java-Shell-下载

    一系列文档和参考实现,重点介绍如何将各种技术组合成有意义的医疗保健模式-Java-Shell-下载

    Jsch批量执行多条命令,包含切换用户输入密码

    参考expect4j的交互式操作方式控制输入输出流实现批量执行多条shell命令同时支持切换用户输入密码提权执行命令输入密码等操作 有完整的测试用例,便于理解 ...具体模板参数意义下载解压缩后查看batch.list中有解释

    gnome-shell-extension-services-systemd:Gnome Shell扩展,允许启动和停止systemd服务

    Services Systemd是 Shell扩展,它允许通过主菜单面板中状态区域中的菜单启动和停止systemd服务。 由于存在许多不相关的系统服务-从显示在此菜单中的意义上讲-用户可以预先选择应在扩展程序的首选项对话框中显示哪些...

    aspm:Atom-Shell 包管理器(非官方)

    aspm - Atom-Shell 包管理器 类似于 npm 的节点 CLI 脚本,但适用... 如果您在同一台机器上为多个平台/atom-shell-versions 编译,使用 Grunt 构建任务可能更有意义(请参阅grunt-build-atom-shell 。这也允许在 Wind

    Shell脚本中的特殊字符(美元符、反斜杠、引号等)作用介绍

    Shell中的特殊字符有 1、$ 美元符 2、\ 反斜杠 3、` 反引号 4、” 双引号 5、< ,>;,*,?,[,] 下面我一一举列说明 一、$符号 1、echo $? 显示的是上一条指令退出状态 2、echo “$?” 效果同上 3、echo ‘$...

    Shell脚本制作的终端会话回放功能脚本分享

    不久前在书上看到两个很有趣的命令——script和srciptreplay,它可以把终端会话记录到一个文件中,即是说我们可以通过终端会话来来制作命令行技巧视频教程,也可以与他人分享会话文件,而且生成的文件还只是一般的...

    reasonable-shell-script:因为shell脚本不必太糟糕

    适用于大多数软件开发人员的shell脚本模板该存储库包含: :随身带上这个脚本,然后随意修改。 :是的注释版本hello学习,而不是生产代码。 成功编写Shell脚本的... 普通的shell变量应该使用小写字母,例如"$name" 。

    shell脚本之正则表达式、grep、sed、awk

    –正则– 基础正则 ^word ##搜索以word开头的 vi/vim中 ^ 一行的开头 word$ ##搜索以word结尾...\w ##匹配任意一个字符和数字 * ##重复0次或多次前面的一个字符 .* ##匹配所有字符。例:^.* 以任意多个字符开头,

    mcfly:浏览您的shell历史记录。 伟大的斯科特!

    扩展您的Shell历史记录,以跟踪SQLite数据库中的命令退出状态,时间戳和执行目录。 还维护您的常规Shell历史记录文件,以便您可以随时停止使用McFly。 全面支持Unicode。 包括一个简单的操作

    两个shell脚本,用于将任意文件转换为视频格式。-Linux开发

    这组Shell脚本允许用户将任意文件转换为视频文件,反之亦然。 它们最初来自Matlab-Data-Video-Converter,但是我认为创建一个新的存储库以鼓励讨论是有意义的。 转换任意数据到视频两个用于将任意文件转换为视频格式...

Global site tag (gtag.js) - Google Analytics