Bash 中的序列表达式

Bash 中序列表达式用于产生一个序列,其结构为 {start..end[..step]}。其中 startend 可以为整数或者单个字符,分别表示序列的开始与结束,可选的 step 表示生成的序列的步长,必须为整数,否则表达式无效。

整数序列

startend 都是整数时,产生从 startend,步长为 step 的整数序列。startend 可以包含若干 0 前缀,此时生成的序列中各个序列项的数字个数将相同,不足的补 0 前缀。例如:

 1 $ echo {1..10}                  (1)
 2 1 2 3 4 5 6 7 8 9 10
 3 $ echo {1..10..0}               (2)
 4 1 2 3 4 5 6 7 8 9 10
 5 $ echo {1..10..3}
 6 1 4 7 10
 7 $ echo {01..010..3}             (3)
 8 001 004 007 010
 9 $ echo {01..00010..3}           (4)
10 00001 00004 00007 00010
  1. 未指定步长时,默认为 1

  2. 步长为 0 时,采用步长为 1

  3. 输出序列项都补充到 3 个数字

  4. 输出序列项都补充至 5 个数字

startend 大时,会生成递减序列:

1 $ echo {10..1}                   (1)
2 10 9 8 7 6 5 4 3 2 1
3 $ echo {10..1..0}                (2)
4 10 9 8 7 6 5 4 3 2 1
5 $ echo {10..1..3}                (3)
6 10 7 4 1
  1. 未指定步长时,默认为 -1

  2. 步长为 0 时,采用步长为默认步长 -1

  3. 步长指定为 3,采用步长为 -3

字符序列

startend 都为单个字符时,生成从 startend 步长为 step 的字符序列。字符序列同样可以递减,且默认步长是 1 或 -1。

1 $ echo {g..o}                     (1)
2 g h i j k l m n o
3 $ echo {g..o..2}                  (2)
4 g i k m o
5 $ echo {o..g}                     (3)
6 o n m l k j i h g
7 $ echo {o..g..2}                  (4)
8 o m k i g
  1. 生成从字符 g 到字符 o 的步长为默认步长 1 的字符序列

  2. 生成从字符 g 到字符 o 的步长为 2 的字符序列

  3. 生成从字符 o 到字符 g 的步长为默认步长 -1 的逆序字符序列

  4. 生成从字符 o 到字符 g 的步长为 -2 的逆序字符序列

本文标题: Bash 中的序列表达式

本文链接: https://blog.zhustec.me/posts/sequence-expression-in-bash

发布时间: 2018-07-21T08:41:08+00:00

版权声明: 本文由 zhustec 原创 采用 CC BY-NC-ND 4.0 许可协议 转载请保留以上声明信息!