「这是我参加2022首次更文挑战的第1天,活动详情查看:2022首次更文挑战」

  • 原文地址:3 Uncommon Bash Tricks That You Should Know
  • 原文作者:Adam Green
  • 译文出自:翻译方案

3 个鲜为人知的 Bash 技巧

优异的开发人员往往键入的内容更少 —— 这也让他们能够:

  • 更快地作业
  • 更准确地作业
  • 削减过错
  • 减轻双手疲惫的压力

一种削减键入的方法是恰当地运用你的指令行(通常是 Bash),而本文将要向大家介绍的内容就是 —— 3 个削减键入的 Bash 技巧。

本文中介绍的 3 个 Bash 技巧是:

  1. 运用 {a,b} —— 扩展参数,以防止再次键入单个指令
  2. 运用 $_ —— 访问最终一个参数,以防止从最终一个指令中从头键入
  3. 运用 ^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、前端、后端、区块链、产品、设计、人工智能等范畴,想要查看更多优质译文请持续重视 翻译方案、官方微博、知乎专栏。