假设我们定义了一个变量为:

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个字节

转自:http://space.baidu.com.cn/ugo5/blog/item/c550bbc54d1644079c163dbd.html

shell中的${},##和%%的使用相关推荐

  1. shell中十种实现自加的方法

    shell中十种实现自加的方法 let "n = $n + 1" : $((n = $n + 1)) ((n = n+1)) n=$(($n + 1)) : $[ n = $n + ...

  2. 【linux】shell中整数运算的加、减、乘、除

    1.使用双括号"(( ))" shell中变量实现加法的方法 d= $(($d + 2)) 例子如下 #!/bin/bash d=0 echo "d=$d"fo ...

  3. linux shell $0怎么输出,linux shell中$0,$?,$!等的特殊用法

    一.Shell脚本中$0.$?.$!.$$.$*.$#.$@等的意义说明 (1)$$ Shell本身的PID(ProcessID,即脚本运行的当前进程ID号) (2)$! Shell最后运行的后台Pr ...

  4. Linux从mysql中读取数据_linux shell中读写操作mysql数据库

    本文介绍了如何在shell中读写mysql数据库.主要介绍了如何在shell 中连接mysql数据库,如何在shell中创建数据库,创建表,插入csv文件,读取mysql数据库,导出mysql数据库为 ...

  5. shell中的函数shell中的数组告警系统需求分析

    2019独角兽企业重金招聘Python工程师标准>>> 20.16/20.17 shell中的函数 函数的概念 函数就是把一段代码整理到了一个小单元中,并给这个小单元起一个名字,当用 ...

  6. shell中大于、等于、小于

    shell中大于.等于.小于 -eq           等于 -ne           不等于 -gt            大于 -lt            小于 -ge           ...

  7. shell中竖线的作用_如何在 Linux 中安装、配置和使用 Fish Shell?

    每个 Linux 管理员都可能听到过 shell 这个词.你知道什么是 shell 吗? 你知道 shell 在 Linux 中的作用是什么吗? Linux 中有多少个 shell 可用? -- Ma ...

  8. linux的shell的功能,linux shell中${ }的一些特异功能

    linux shell中${ }的一些特异功能,这部分内容是shell中的比较经典的部分之一,建议认真学习,深刻体会. 假设我们定义一个变量为: file=/dir1/dir2/dir3/my.fil ...

  9. linux shell中小数的运算

    对于在Shell中进行小数数字的计算,其实方法有很多,但是常用的方法都有其弱点: 1.bc bc应该是最常用的Linux中计算器了,简单方便,支持浮点. root@localhost:~# echo ...

  10. shell中执行脚本并显示到终端和保存到日志文件中

    我们知道,在shell中执行脚本会返回一定信息到终端屏幕上 ,但是有一些特殊情况,如以下情况: 1)显示到终端中 echo  "abck" 以上在手动执行脚本中是可以的,如果是编写 ...

最新文章

  1. priority_queue 结构体的优先级设置
  2. 算法谜题 php,JavaScript实现N皇后问题算法谜题解答_javascript技巧
  3. Git 代码防丢指南
  4. 立足前沿 直击热点 搭建平台,2018中国人工智能大会在深圳拉开帷幕
  5. oracle之 oracle database vault(数据库保险库)
  6. 用python画常密度轮廓线,如何使用Matplotlib在极坐标中绘制具有等高线密度线的散点图?...
  7. springboot几种注入_Spring Boot中使用JdbcTemplate访问数据库
  8. sshfs的挂载与卸载
  9. java开发中准则怎么写_Java开发中通用的方法和准则20条
  10. C++笔记-char*存储的二进制转成long long十进制(读串口的时候经常用到)
  11. MoCo不适用于目标检测?MSRA提出对象级对比学习的目标检测预训练方法SoCo!性能SOTA!(NeurIPS 2021)...
  12. CSS快速学习2:选择符权重和字体类属性
  13. 风好大,我好冷——个人分工理解
  14. java数组删除数组元素_如何在Java中删除数组元素
  15. 地理信息科学考计算机二级,全国信息化工程师----GIS应用水平考试大纲(二级)...
  16. 芯片解密MC9S08DZ16 飞思卡尔系列芯片解密
  17. 支付宝支付-当面付和App支付
  18. 异步清零和同步清零的区别
  19. 物联网 DFrobot 掌控版的使用 智能灯和MQTT
  20. 指令集与左岸芯慧正式启动“中国农业智能操作系统”共建

热门文章

  1. linux 扩充db2表空间,如何扩充db2的表空间、加容器等表空间维护操作
  2. 失望时想起了你是什么歌_你是空你是空是什么歌 你是风你是风什么歌
  3. python删除重复值所在的行数_python – 在last中删除具有重复值的行
  4. java高并发实战Netty+协程(Fiber)|系列1|事件驱动模式和零拷贝
  5. nzhtl1477-ただいま帰りました ( bfs )
  6. 李宁-2015年7月13日-个人文档
  7. 关于js的function.来自百度知道的回答,学习了.
  8. %hd %d %ld %u ......
  9. 教你怎么买虚拟空间(转)
  10. 订阅mysql的二进制日志_MySQL二进制日志