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)