当前位置: 首页 > news >正文

shell中${}的妙用

为了完整起见,我这里再用一些例子加以说明 ${ } 的一些特异功能:
假设我们定义了一个变量为:
file=/dir1/dir2/dir3/my.file.txt 

1. 截断功能
${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
记忆的方法为:
[list]#是去掉左边, ##最后一个
      %是去掉右边, %%第一个
2. 字符串提取 
单一符号是最小匹配﹔两个符号是最大匹配。
${file:0:5}:提取最左边的 5 个字节:/dir1
${file:5:5}:提取第 5 个字节右边的连续 5 个字节:/dir2
3. 字符串替换
${file/dir/path}:将第一个 dir 提换为 path:/path1/dir2/dir3/my.file.txt
${file//dir/path}:将全部 dir 提换为 path:/path1/path2/path3/my.file.txt
4. 针对不同的变量状态赋值(没设定、空值、非空值):
${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。(非空值时不作处理)
注意: 
":+"的情况是不包含空值的.
":-", ":="等只要有号就是包含空值(null).
5. 变量的长度
${#file}
6. 数组运算
A=(a b c def)
${A[@]} 或 ${A[*]} 可得到 a b c def (全部组数)
${A[0]} 可得到 a (第一个组数),${A[1]} 则为第二个组数...
${#A[@]} 或 ${#A[*]} 可得到 4 (全部组数数量)
${#A[0]} 可得到 1 (即第一个组数(a)的长度),${#A[3]} 可得到 3 (第四个组数(def)的长度)

转载于:https://www.cnblogs.com/xuxiuxiu/p/6435229.html

相关文章:

  • 重定向监听端口并持久化路由配置
  • apiCloud结合layer实现动态数据弹出层
  • Win7 VS2015编译wxWidgets-3.1.0
  • html5 class
  • 2008 R2 Remote Desktop Server driver RDPDR.sys cannot be started, error 577
  • html5/css3
  • 三层与mvc
  • ERPS实例演示
  • SuSE Linux 开启VNC服务
  • HDU1572:下沙小面的(2)(DFS)
  • Android-实现Animation everywhere
  • 使用agvtool更改app version/build
  • 关于position的小总结
  • 《剑指offer》二叉树镜像
  • 走向全栈之MongoDB的使用
  • 【159天】尚学堂高琪Java300集视频精华笔记(128)
  • 【vuex入门系列02】mutation接收单个参数和多个参数
  • 2017前端实习生面试总结
  • Android 架构优化~MVP 架构改造
  • Android组件 - 收藏集 - 掘金
  • Centos6.8 使用rpm安装mysql5.7
  • cookie和session
  • ES6简单总结(搭配简单的讲解和小案例)
  • Java知识点总结(JDBC-连接步骤及CRUD)
  • java中的hashCode
  • js递归,无限分级树形折叠菜单
  • Mysql5.6主从复制
  • PHP 的 SAPI 是个什么东西
  • SpiderData 2019年2月16日 DApp数据排行榜
  • vuex 笔记整理
  • 程序员该如何有效的找工作?
  • 第2章 网络文档
  • 搞机器学习要哪些技能
  • 官方解决所有 npm 全局安装权限问题
  • 每天10道Java面试题,跟我走,offer有!
  • 模仿 Go Sort 排序接口实现的自定义排序
  • 那些被忽略的 JavaScript 数组方法细节
  • 少走弯路,给Java 1~5 年程序员的建议
  • 微信小程序--------语音识别(前端自己也能玩)
  • 我这样减少了26.5M Java内存!
  • 小程序开发中的那些坑
  • 移动端解决方案学习记录
  • 赢得Docker挑战最佳实践
  • PostgreSQL 快速给指定表每个字段创建索引 - 1
  • ​2020 年大前端技术趋势解读
  • ​猴子吃桃问题:每天都吃了前一天剩下的一半多一个。
  • ​七周四次课(5月9日)iptables filter表案例、iptables nat表应用
  • #LLM入门|Prompt#3.3_存储_Memory
  • (java版)排序算法----【冒泡,选择,插入,希尔,快速排序,归并排序,基数排序】超详细~~
  • (Matalb时序预测)PSO-BP粒子群算法优化BP神经网络的多维时序回归预测
  • (一)认识微服务
  • (一)使用IDEA创建Maven项目和Maven使用入门(配图详解)
  • (转)真正的中国天气api接口xml,json(求加精) ...
  • .CSS-hover 的解释
  • .NET Core引入性能分析引导优化