命令行替换
执行命令之前,bash shell会先对命令进行一些替换,有如下几种替换类型
替换 | 语法 | 含义 |
---|---|---|
历史 | ! | 前一个命令行 |
大括号(Brace) | {} | 指定的文本 |
代字号(Tilde) | ~USRNAME | 用户的主目录 |
变量 | $, ${...} | 局部变量和环境变量 |
算术 | $((...)) $[...] | 整数算数运算 |
命令替换 | ... $(...) |
运行在子shell中的命令输出 |
路径名 | *, ?, [...],[^....] | 文件系统中匹配的文件名 |
使用$!
来调用上一个命令,
我对~
可能比较熟悉,经常使用cd ~
可以进入家目录,或者是source ~/.bashrc
来启动修改后的配置文件,但是想去别人的家目录却经常要用到绝对路径,其实可以使用~Jimmy
表示Jimmy家目录的路径
{....}
可以用来创建或者删除多个文件夹, 这是因为shell会将一个单词展开为多个单词
mkdir dir{A,B,C,D}
# 如果是A-Z,则是
mkdir dir{A..Z}
# 不推荐这样创建以数字结尾的文件夹
mkdir dir{1..10}
# 更推荐这个,便于排序
mkdir dir{01..10}
简单的整数运算,可以用$((1023 * 2124))
实现,设计到浮点型就完犊子了
命令替换 也比较常用,你可以用它在shell脚本中根据日期自动化建立文件夹,有两种方式,反引号或者是$(...)
touch reports.$(date +%d%b%Y)
# 下面这个太推荐,容易写错
touch reports.`date +%d%b%Y`
命令替换的原理: bash shell会产生要给新的子shell、运行命令、记录输出和推出子shell来执行命令替换。调用命令替换的文本就会被相应的输出所代替。
路径名替换,可以匹配一些列符合要求的文件, 比如说运行结束后,生成了大量以log结尾的日志文件,就能用路径名替换的方式批量删除
rm *.log