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

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 定义为非空值。 (保留空值及非空值)
  • ${file:=my.file.txt} :若 $file 没设定或为空值,则使用 my.file.txt 作默认值,同时将 $file 定义为非空值。 (保留非空值)
  • ${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 个字?...

接下来介绍一下  bash 的数组(array)处理方法:
一般而言,A="a b c def" 这样的变量只是将 $A 替换为一个单一的字串,
但是改为 A=(a b c def) ,则是将 $A 定义为数组。
bash 的数组替换方法可参考如下方法:

  • ${A[@]} 或 ${A[*]} 可得到 a b c def (全部数组)
  • ${A[0]} 可得到 a (第一个数组),${A[1]} 则为第二个数组...
  • ${#A[@]} 或 ${#A[*]} 可得到 4 (全部数组数量)
  • ${#A[0]} 可得到 1 (即第一个数组(a)的长度),${A[3]} 可得到 3 (第一个数组(def)的长度)
  • A[3]=xyz 则是将第 4 个数组重新定义为 xyz ...

一句话总结:bash 很强大!

bash{} 方法总结的更多相关文章

  1. AIX下安装bash

    在AIX系统下,默认是没有安装bash环境的,对于经常操作的维护人员来说,非常不方便,所以下面我们来动手安装bash. 1.确认系统是否已安装bash 方法1:之间敲bash命令,若提示没有此命令则没 ...

  2. python反转字符串(简单方法)及简单的文件操作示例

    Python反转字符串的最简单方法是用切片: >>> a=' >>> print a[::-1] 654321 切片介绍:切片操作符中的第一个数(冒号之前)表示切片 ...

  3. Shell中判断字符串是否为数字的6种方法分享

    #!/bin/bash ## 方法1 a=1234;echo "$a"|[ -n "`sed -n '/^[0-9][0-9]*$/p'`" ] &&a ...

  4. Linux下批量修改文件名方法

    对于在Linux中修改文件名的方式一般我们会用mv命令进行修改,但是mv命令是无法处理大量文件修改名称. 但是在处理大量文件的时候该如何进行批量修改呢? 方法一:mv配合for循环方式进行修改 [ro ...

  5. linux 匹配字符串是否为数字

    #!/bin/bash ## 方法1 a=1234;echo "$a"|[ -n "`sed -n '/^[0-9][0-9]*$/p'`" ] &&a ...

  6. shell 判断字符串是否为数字

    本篇文章主要介绍了"shell 判断字符串是否为数字",主要涉及到shell 判断字符串是否为数字方面的内容,对于shell 判断字符串是否为数字感兴趣的同学可以参考一下. #!/ ...

  7. 我的docker 使用笔记

    0 容器启动 docker run image_name(镜像名称) echo "hello word" 1 启动容器 退出后 重新进入 方法一 sudo docker exec ...

  8. ubuntu dash

    缘由:写一些脚本放在/etc/rc.loca自动执行开机启动报错 fiail to start /etc/rc.local 查找资料 缘起:ubuntu在6.0后默认bash改为了dash  导致很多 ...

  9. shell基本理论知识

    (1)查看系统上安装了哪些shell # cat /etc/shells # /etc/shells: valid login shells /bin/sh /bin/dash /bin/bash / ...

随机推荐

  1. C#_控件——DropDownList

    1.html <asp:CheckBox ID="CheckBox11" runat="server" onclick="changecheck ...

  2. HDU 5828(线段树)

    Problem Rikka with Sequence 题目大意 维护一个序列,支持三种操作. 操作1:区间加. 操作二:区间开根号(向下取整). 操作3:区间求和. 解题分析 可以发现经过若干次操作 ...

  3. Magento的价格去掉小数点

    Magento的默认情况,价格后面是有小数点的,我们来看下如何正确的来去掉小数点. 1.复制如下路径的文件 app/code/core/Mage/Directory/Model/Currency.ph ...

  4. ubuntu中常用快捷键

    本文转自 http://yife.im/ubuntu-terminal-shortcode/ 原文的格式会比较好看. Ubuntu终端常用的快捷键 Oct 3, 2013 • 23,469 views ...

  5. 使用jetty-maven-plugin插件进行测试

    为了能够使用maven的jetty插件对项目进行测试,需要进行如下操作: (1)修改maven配置文件 为了能够在命令行中使用jetty命令,需要修改maven的配置文件settings.xml文件, ...

  6. Asp.net 执行回调操作后 无法更新ViewState的问题

    源码 待续...

  7. Date 对象总结

    Date对象,是操作日期和时间的对象.Date对象对日期和时间的操作只能通过方法. 无参数: var date=new Date(); console.log(date)     // Mon Jun ...

  8. JSON日期格式处理

    protected static SerializeConfig mapping = new SerializeConfig(); private static String dateFormat; ...

  9. html---文本框样式;

    一.一个单行文本框的例子 <form name="form1" action="mailto:3400982550@qq.com" method=&quo ...

  10. leetcode 133. Clone Graph ----- java

    Clone an undirected graph. Each node in the graph contains a label and a list of its neighbors. OJ's ...