逸思杂陈

逸思杂陈

马上订阅 逸思杂陈 RSS 更新: https://blog.ponder.work/atom.xml

bash 语法备忘

2021年11月28日 15:00

bash 语法作为程序员好像都了解一些,但又缺少体系化学习,需要使用到某些功能时又经常手忙脚乱地查。
本文主要参考阮一峰的bash教程,对bash的知识点进行了梳理。
本文目的是作为bash的语法备忘录、语法速查表。

模式扩展

模式扩展(globbing),类似C语言中的宏展开,我们通常使用的通配符*就是其中之一。

Bash 一共提供八种扩展,前4种为文件扩展,只有文件路径确实存在才会扩展。

  • ~ 波浪线扩展
  • ? 问号扩展
  • * 星号扩展
  • [] 方括号扩展
  • {} 大括号扩展
  • $var 变量扩展
  • $(date) 命令扩展
  • $((1 + 1)) 算术扩展

波浪线扩展

波浪线~会自动扩展成当前用户的主目录。
~user表示扩展成用户user的主目录。如果用户不存在,则波浪号扩展不起作用。

1
2
3
4
5
6
7
8
bash-5.1$ echo ~/projects/
/Users/ruan/projects/

bash-5.1$ echo ~root/.ssh
/var/root/.ssh

bash-5.1$ echo ~aaa/.ssh
~aaa/.ssh

问号扩展

?字符代表文件路径里面的任意单个字符,不包括空字符。
只有文件确实存在的前提下,才会发生扩展。

1
2
3
4
5
6
7
bash-5.1$ touch {a,b}.txt ab.txt

bash-5.1$ ls ?.txt
a.txt b.txt

bash-5.1$ ls ??.txt
ab.txt

星号扩展

*字符代表文件路径里面的任意数量的任意字符,包括零个字符。

1
2
3
4
5
6
7
8
9
bash-5.1$ ls *.txt
a.txt ab.txt b.txt

bash-5.1$ ls /usr/local/Cellar/*/*/bin/z*
/usr/local/Cellar/ffmpeg/4.4_2/bin/zmqsend
/usr/local/Cellar/mysql-client/8.0.26/bin/zlib_decompress
/usr/local/Cellar/netpbm/10.86.24/bin/zeisstopnm
/usr/local/Cellar/perl/5.34.0/bin/zipdetails
/usr/local/Cellar/zstd/1.5.0/bin/zstd

方括号扩展

方括号扩展的形式是[...],只有文件确实存在的前提下才会扩展。

[^...][!...]。它们表示匹配不在方括号里面的字符

方括号扩展有一个简写形式[start-end],表示匹配一个连续的范围

1
2
3
4
5
6
7
8
bash-5.1$ ls [ab].txt
a.txt b.txt

bash-5.1$ ls [^b]b.txt
ab.txt

bash-5.1$ ls [a-b].txt
a.txt b.txt

大括号扩展

大括号扩展{...}表示分别扩展成大括号里面的所有值
大括号也可以与其他模式联用,并且总是先于其他模式进行扩展。...

剩余内容已隐藏

查看完整文章以阅读更多