善用 Bash 大括号展开
Linux and Bash
Bash 展开
有很多种,常用的 大括号展开
可改善脚本的结构和效率。
大括号展开的形式
- 列举式,以逗号
,
分隔 - 序列,以双点号
..
分隔,支持额外的步长参数。以0
开头的数字可以用于控制输出对齐的值
大括号展开支持拼接,也可以嵌套。
由于 Bash 在执行任意命令前先进行展开,因此可以用来创建多个参数传递给要执行的命令。
利用大括号展开,同时创建多个文件
touch /path/to/dir{1,3,5,7,9}/file.txt
touch /path/to/dir{1..9..2}/file.txt # 同上
touch /path/to/dir/0x{A..Z}.txt
同时删除多个文件
rm -f /var/logs/nginx/access.log.{1..5}
同目录备份配置文件
cp /etc/nginx/nginx.conf{,.bak}
循环控制(10 遍)
for s in {0..9}
do
echo $s
done
循环控制(100 遍)
for s in {0..99}
do
echo $s
done
循环控制(16 遍) / 虚拟十六进制
for s in {{0..9},{A..F}}
do
echo $s
done
循环控制(256 遍) / 虚拟十六进制
for s in {{0..9},{A..F}}{{0..9},{A..F}}
do
echo $s
done
Bash 支持的其它展开类型,按优先级排序
- 大括号展开(Brace Expansion)
{...}
- 波浪号展开(Tilde Expansion)
~
- 参数展开(Shell Parameter Expansion)
${...}
- 命令替换(Command Substitution)
$(...)
或...
- 数学计算(Arithmetic Expansion)
$((..))
- 进程替换(Process Substitution)
<(...)
或>(...)
- 单词分割(Word Splitting)
IFS
- 文件名展开(Filename Expansion)
*
?
[..]
- 引号去除(Quote Removal)