Bash 的使用有很多诡异的地方,平时遇到什么奇怪的事情就记录在这里,以后查阅起来方便。

1 易混概念

这里记录一些很基本,但初学者很容易错的概念,接触 Bash 的时候一定要把这些细节掌握牢靠。

1.1 Bash 输出重定向

在 Linux 下,把命令的输出重定向到文件是一个很常见的操作,但如何正确区分 stdout 和 stderr 可不是一件容易的事,这里总结了正确阅读输出重定向的一些小技巧。

1.2 “$*”和“$@”

在 Bash 下,$*$@ 看起来很相似,其实用起来区别还是很大的,看这里

2 Bash 特性

这里记录一些 Bash 特有,sh 不具备的比较方便的特性。

2.1 Bash 文件名通配符不匹配展开

如果我们想匹配目录下所有扩展名不是 cpp 的文件,该怎么做呢?

3 代码片段

本栏目包含一些用 Bash 写成的比较有技巧的小片段,在实际工作中可能会用得着。

3.1 用 Bash 写 URLEncode

URLEncode 是非常常用的一种编码方式,在各种语言下都有实现,但在 shell 底下,要做 URLEncode 就不是那么方便了。这里给出了一段用 Bash 写的 URLEncode 实现,希望能给大家带来一些帮助。

3.2 不排序去除文件中的重复行

单纯去除文件中的重复行很简单,直接 sort -u 就可以了。但是如果在去除重复行的同时,还想保留原始文件的顺序的话,就不是那么简单了。这里给出了一个非常有创意的解决方案。

3.3 只保留文件中的重复行

和上一条恰好相反,如果你只想保留一个文件中至少出现过一次的行,把只出现过一次的行都删除的话,可以这么做:

$ awk 'x[$0]++' file3

详细解释可以参考前一篇文章