3.8 快速引用参数的部分内容
在上一节我们介绍了如何引用历史命令中的参数,除此之外,Shell 甚至比我们想要得到的做得更多。利用 Shell 提供的历史展开模式修饰符,使我们得以快速引用参数中的部分内容。
3.8.1 引用路径开头
请看例子:
在此,我想引用该路径的开头部分 /usr/share/fonts。为了达到这个目的,我在 !$(最后一位参数)的基础上添加了 :h。此处的 :h 为修饰符,意味着截取路径的开头部分,正如 dirname 的效果一样。
3.8.2 引用路径结尾
有头就有尾。通过 :t 修饰符,我们可以引用路径的结尾部分,其效果跟 basename 类似。
xiaodong@codeland:~$ wget http://nginx.org/download/nginx-1.15.8.tar.gz
xiaodong@codeland:~$ tar zxvf !$:t经过 !$:t 引用后,我们的命令变成了:
3.8.3 引用文件名
对于存在文件名的情形,我们还可以利用 :r 修饰符来只引用文件名部分(这将排除掉扩展名)。例如:
这里的 !$:r 将 hello.zip 去掉扩展名,只保留 hello 部分。
3.8.4 将引用部分更改为大写
下面介绍的两个修饰符为 zsh 所特有,bash 目前尚不支持。通过 :u 修饰符,我们能够将所引用的部分更改为大写字母。
这里的 !$:u 将 histchars 全部更改为大写字母。
3.8.5 将引用部分更改为小写
与 :u 相对的是,:l 则使我们能够将所引用的参数全部更改为小写字母。
这里的 !$:l 将 SAVEHIST 全部更改为小写字母。
需要特别指出的是,Shell 还支持将多个修饰符进行联用,在它们之间只需使用 : (冒号) 分隔即可。例如:
xiaodong@codeland:~$ ls /usr/share/fonts/truetype
xiaodong@codeland:~$ echo !$:t:u
xiaodong@codeland:~$ echo TRUETYPE这里,我们先用 :t 引用了路径的结尾部分,然后又使用 :u 将其更改为了大写字母。