「这是我参加2022首次更文挑战的第1天,活动详情查看:2022首次更文挑战」
- 原文地址:3 Uncommon Bash Tricks That You Should Know
- 原文作者:Adam Green
- 译文出自:翻译方案
优异的开发人员往往键入的内容更少 —— 这也让他们能够:
- 更快地作业
- 更准确地作业
- 削减过错
- 减轻双手疲惫的压力
一种削减键入的方法是恰当地运用你的指令行(通常是 Bash),而本文将要向大家介绍的内容就是 —— 3 个削减键入的 Bash 技巧。
本文中介绍的 3 个 Bash 技巧是:
- 运用
{a,b}
—— 扩展参数,以防止再次键入单个指令 - 运用
$_
—— 访问最终一个参数,以防止从最终一个指令中从头键入 - 运用
^old^new
—— 快速更改最终一条指令的一部分
所有这些技巧都与 zsh 兼容。
本文输入的指令均以 $
最初。关于指令行解析后的代码,我将在相关代码下面以不带 $
的单独一行写出这句代码同等的解析后的代码。
{a,b}
拓宽参数
当咱们在编写指令时,咱们常会重复输入同一个指令。
以更改文件后缀为例,咱们一般运用的是 mv
:
$ mv README.txt README.md
注意到咱们写了两次 README,而参数扩展就能够防止这种重复 —— 更改文件的后缀而无需输入 README 两次:
$ mv README.{txt,md}
mv README.txt README.md
咱们运用的参数扩展为 {txt,md}
,而它将会扩展为两个参数 —— txt md
(会以空格分隔)。
参数扩展会为花括号内,以逗号分割的每个元素别离创立一个参数:
$ echo {1,2,3}
1 2 3
$ echo pre{1,2,3}
pre1 pre2 pre3
空元素将创立不带任何替换项的参数:
$ echo pre{,1,2}fix
prefix pre1fix pre2fix
另一个比如 —— 咱们将要把 data
文件夹中的 models
文件夹重命名为 ml
:
$ mv data/models data/ml
咱们能够运用参数扩展来节约从头输入 data/
的时间:
$ mv data/{models,ml}
mv data/models data/ml
咱们能够运用带有数字序列的参数扩展 —— 这在创立次序编号目录时很有用:
$ mkdir data{0..2}
mkdir data0 data1 data2
咱们还能够在参数内部进行参数扩展 —— 例如,更改路径中的文件夹称号:
$ cat models/{baseline,final}/data.csv
cat models/baseline/data.csv models/final/data.csv
最终一个示例:在 mv
指令中,咱们运用了 3 个参数 —— 将两个 Python 文件移动到 tests 文件夹中:
$ mv test_unit.py test_system.py tests
小结
每逢你在单个指令中多次键入某些内容时,参数扩展极大可能能够帮助你节约精力。
运用 $_
运用访问最终一个参数
终端由一系列指令操作构成,而咱们经常在多个指令之间重用信息。
假如说咱们前面的技巧,参数扩展,是用于削减在单个指令上的键入的。那么现在这个技巧则是用于削减对多个指令的键入。
以创立文件夹并将当前目录转移到其间的情况为例:
$ mkdir temp
$ cd temp
现在咱们其实能够经过运用 $_
将上个指令的参数传递过来,防止让自己重复键入同样的内容:
$ mkdir temp
$ cd $_
cd temp
上面的代码中,咱们运用了 $_
访问上一个指令的最终一个参数,在本例中这个参数为 temp
。
想要重用上一个指令的最终一个参数(本例中为 temp
)的场景其实非常普遍,以至于 Bash 会将其存储在一个特别的变量 _
中。咱们需要运用 $
前缀来访问它(与 $PATH
或 $HOME
相同)。
下面是运用 $_
的另一个示例 —— 移动文件并凭借 cat
运用打印内容到 STDOUT
:
$ mv main.py src/main.py
$ cat src/main.py
那么现在咱们该如何再次重用最终一个参数 src/main.py
?
你能够运用以下指令重写此代码,$_
在第二个指令中会自动替换为 src/main.py
:
$ mv main.py src/main.py
$ cat $_
cat src/main.py
运用 $_
意味着你不需要重写复杂的文件路径,然后不会在从头键入时出错。
小结
每逢你需要在多个指令重复键入某些内容时,运用 $_
可能有助于减轻疲惫的双手的压力。
运用 ^old^new
快速替换
有时,咱们可能在指令行管理程序中运行了一个指令,并很快意识到自己在指令中犯了一个过错。
但其实咱们无需再次键入指令,咱们能够运用快速替换,经过更换上一个指令中的内容来修复过错。
举个比如 —— 你期望经过 ssh 连接到服务器,并运行了指令去连接 —— 运行后才意识到用户名应该是 user 而非 ubuntu!
$ ssh ubuntu@198.compute.com
你能够运用快速替换来更改所需的部分,而不用再次从头键入整个指令以在此处将 ubuntu 改为 user:
$ ^ubuntu^user
ssh user@198.compute.com
快速替换的格式是 ^old^new
,等效于:
$ !!:s/old/new
!!
用于获取最终一个指令,而 :s
是替换的正则表达式。我想你会赞同 ^old^new
减轻了不少作业担负!
小结
当你写错了指令,而且指令不方便重写(例如很长),那么,运用 ^old^new
能够极大的减轻你的费事。
感谢阅读!
假如发现译文存在过错或其他需要改进的地方,欢迎到 翻译方案 对译文进行修改并 PR,也可获得相应奖励积分。文章最初的 本文永久链接 即为本文在 GitHub 上的 MarkDown 链接。
翻译方案 是一个翻译优质互联网技术文章的社区,文章来源为 上的英文分享文章。内容覆盖 Android、iOS、前端、后端、区块链、产品、设计、人工智能等范畴,想要查看更多优质译文请持续重视 翻译方案、官方微博、知乎专栏。