Bash特性


GNU Bash

Bash特性

BashUnix shell的一种,在1987年由布莱恩·福克斯为了GNU计划而编写。1989年发布第一个正式版本,原先是计划用在GNU操作系统上,但能运行于大多数类Unix系统的操作系统之上,包括LinuxMac OS X v10.4起至macOS Mojave都将它作为默认shell,而自macOS Catalina,默认Shellzsh取代。

BashBourne shell的后继兼容版本与开放源代码版本,它的名称来自Bourne shell(sh)的一个双关语(Bourne again / born again)Bourne-Again SHell

Bash是一个命令处理器,通常运行于文本窗口中,并能执行用户直接输入的命令。Bash还能从文件中读取命令,这样的文件称为脚本。和其他Unix shell 一样,它支持文件名替换(通配符匹配)、管道、here文档、命令替换、变量,以及条件判断和循环遍历的结构控制语句。包括关键字、语法在内的基本特性全部是从sh借鉴过来的。其他特性,例如历史命令,是从cshksh借鉴而来。

总的来说,Bash虽然是一个满足POSIX规范的shell,但有很多扩展。因此,本文中就将介绍Bash的这些特性。(虽然本文是用zsh为例,但是这些特性一般是通用的)

1. 花括号{}展开

A. 基本用法

Bash会自动对花括号的内的内容进行展开。例如:

echo {change1,change2,change3}

相当于下面三个命令

echo change1
echo change2
echo change3

注意,逗号之间不能有空格

得到的输出如下:

花括号展开基本用法

B. 省略写法

我们其实可以省略相同的地方,只展开不同的地方。例如上面的例子中,执行的三条命令的输出内容的前半部分都是change。所以我们可以使用下述的省略写法

echo change{1,2,3}

同样,Bash展开后其实就是三条命令

echo change1
echo change2
echo change3

运行结果如下:

花括号展开省略写法

C. 有序省略

我们其实不仅可以省略相同的内容,对于括号内需要展开的内容也可以进行省略。我们使用..来进行有顺序省略。

具体语法为{start..end}

例如:

echo change{1..10}

展开后得到下述命令

echo change1
echo change2
echo change3
echo change4
echo change5
echo change6
echo change7
echo change8
echo change9
echo change10

运行结果如下:

花括号展开有序省略-数字序

当然,只要是顺序的,包括数字序、字母序都可以进行有序省略。例如

echo change_{a..d}

运行结果为:

花括号展开有序省略-字母序

D. 有序省略——指定间隔

类似于Python切片的写法,我们在有序省略中也可以指定间隔,语法为{start..end..leap}

例如:

echo change{1...20..2}

结果为:

花括号展开有序省略-指定间隔

E. 有序省略——对齐

有序省略输出数字序的时候,我们可以在前面补0来实现对齐,例如

echo change{01..10}

运行结果为:

花括号展开有序省略-对齐1

我们补充多少个0,就会对齐多少位。所以我们补充三个0,就会对齐三位

echo change{001..10}

花括号展开有序省略-对齐2

2. 命令历史

A. history

Bash中可以使用history查看历史命令。虽然这个是老掉牙了,但是为了命令历史的完整性,还是介绍一下history命令

history

结果如下:

history运行结果

B. !行号

Bash中我们可以使用!行号来执行之前命令。行号是使用history时显示的行号

history

然后执行1353行的命令

!行号执行历史命令

C. !!

Bash!!表示执行上一条命令

!!

!!执行上一条命令

3. 快捷键

Bash中支持很多快捷键,这些快捷键都很使用,下面将介绍这些快捷键。

A. 移动到行首:Ctrl+a

Bash中使用Ctrl+a快捷键将光标移动到行首。记忆的方法就是a是26个字母中的第一个,所以Ctrl+a就是移动到行首。

演示如下:

移动到行首

B. 移动到行尾:Ctrl+e

Bash中使用Ctrl+e快捷键将光标移动到行尾。记忆的方法就是eEnd的缩写

演示如下:

移动到行尾

C. 删除光标前字符:Ctrl+u

Bash中使用Ctrl+u快捷键将光标签的文字删除。

演示如下:

删除光标前字符

D. 删除光标后字符:Ctrl+k

Bash中使用Ctrl+k快捷键将光标后的字符删除。

演示如下:

删除光标后字符

E. 清屏:Ctrl+l

Bash中使用Ctrl+l快捷键清除整个屏幕。效果等同于clear

演示如下:

清屏


文章作者: Jack Wang
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Jack Wang !
  目录