Bash 大括号展开

作者:Mitch Frazier

Bash *大括号展开* 用于在命令行或 shell 脚本中生成字符串。 大括号展开的语法由序列指定或由大括号“{}”内的逗号分隔的项目列表组成。 序列由两个句点“..”分隔的起始和结束项目组成。

一些示例以及它们展开后的结果

  {aa,bb,cc,dd}  => aa bb cc dd
  {0..12}        => 0 1 2 3 4 5 6 7 8 9 10 11 12
  {3..-2}        => 3 2 1 0 -1 -2
  {a..g}         => a b c d e f g
  {g..a}         => g f e d c b a
如果大括号展开具有前缀或后缀字符串,则这些字符串包含在展开中
  a{0..3}b       => a0b a1b a2b a3b
大括号展开可以嵌套
  {a,b{1..3},c}  => a b1 b2 b3 c

在 bash 中,可以采用多种方式实现计数循环,而无需大括号展开

# Three expression for loop:
for (( i = 0; i < 20; i++ ))
do
    echo $i
done
# While loop:
i=0
while [[ $i -lt 20 ]]
do
    echo $i
    let i++
done
# For loop using seq:
for i in $(seq 0 19)
do
    echo $i
done
使用 bash 序列的计数 for 循环需要最少的输入
for i in {0..19}
do
    echo $i
done
但是,除了计数 for 循环之外,大括号展开是创建具有非数字“索引”的循环的唯一方法
for i in {a..z}
do
    echo $i
done

当将多个长路径名传递给命令时,大括号展开也很有用。 代替输入

  # rm /a/long/path/foo /a/long/path/bar
您可以简单地输入
  # rm /a/long/path/{foo,bar}

通过"set -B" 命令和 shell 的 "-B" 命令行选项启用大括号展开,并通过 "set +B" 和命令行上的 "+B" 禁用它。

Mitch Frazier 是 Emerson Electric Co. 的嵌入式系统程序员。自 2000 年代初以来,Mitch 一直是 *Linux Journal* 的撰稿人和朋友。

加载 Disqus 评论