摘要:20年过去了,我到现在还是能经常在bash中发现一些新的工具和功能 ,我不知道称呼Bash为一个工具是不是比一个代码更为恰当。在这篇文章中我将介绍Bash的一些不常用(但是还是非常有用)的特性。
在我刚开始使用Linux不久,我试图学习一些bash命令,于是我敲下了如下的命令:
$ man bash |
我立即发现bash用户手册简直就是一个长篇史诗。一页又一页的命令、功能说明、小技巧、小说明以及非常多的环境变量。20年过去了,我到现在还是能经常在bash中发现一些新的工具和功能 ,我不知道称呼Bash为一个工具是不是比一个代码更为恰当。在这篇文章中我将介绍Bash的一些不常用(但是还是非常有用)的特性。
一、扩展字段匹配
首先我们来看一个叫做扩展字段匹配的功能。这个选项允许你执行比标准Bash所提供的更复杂的字段匹配。例如,你可以定位除了后缀为.tmp之外的所有文件。扩展字段匹配功能可
以通过shopt命令启用,或者内置的shell选项:
$ shopt -s extblob |
备注:你还可以运行shopt命令来查看其它选项、特性和它提供的一些秘密功能。
一旦启用,我们可以用一个简单的语法列出某个目录中除去后缀为.tmp的所有文件:
$ ls !(*.tmp) |
你还可以使用多个参数:
$ ls !(*.tmp|*.log|*.bak) |
你可以选择使用其它几个extglob的参数,比如:
?(pattern-list) Matches zero or one occurrence of the given patterns *(pattern-list) Matches zero or more occurrences of the given patterns +(pattern-list) Matches one or more occurrences of the given patterns @(pattern-list) Matches exactly one of the given patterns !(pattern-list) Matches anything except one of the given patterns |
二、cdspell shell选项
Cdspell是另一个很有用并且少为人知的shell命令。Cdspell命令可以更正在cd命令中出现的小的拼写错误。你可以通过shopt命令行来启用cdspell选项。
$ shopt -s cdspell |
举个例子,现在我们试着输入一个简单的关于更改目录的错误命令:
$ cd /ect /etc |
很快你能发现这个小错误被自动更正过来了,并且bash已经让你成功更改到了正确的目录下。
$ pwd /etc |
Cdspell选项可以自动更正字母顺序拼写错误的单词,漏了字母的单词,还可以去掉单词中多余的字母。
三、更好地管理Bash命令历史记录
Bash中最有用的功能之一就是可以自动记忆你曾经使用过的命令。你可以用history命令来列出一系列之前执行过的命令。然后你可以在bash shell中用叹号标注来找回并且执行之前的命令。例如,你可以从历史记录中通过数字列出某条命令:
$ !110 |