答案1
从bash
手册中(我强调):
序列表达式采用 的形式
{x..y[..incr]}
,其中x
和y
是整数或单个字符,并且incr
是可选增量,是一个整数。当提供整数时,表达式将扩展到x
和之间的每个数字y
(包括 和 )。提供的整数可以带有前缀,以0
强制每个项具有相同的宽度。当x
或y
以零开头时,shell 会尝试强制所有生成的术语包含相同数量的数字,并在必要时进行零填充。 当提供字符时,表达式将使用默认的 C 语言环境按字典顺序扩展为x
和之间的每个字符(包括 和 )。y
请注意,两者x
和y
必须属于同一类型。当提供增量时,它将用作每项之间的差。默认增量为 1 或 -1(视情况而定)。
以字母作为范围的大括号扩展允许在bash
.因此,您看到的是 ASCII 表中G
和之间的字符a
(默认增量为 1,因为值按表中的顺序出现)。
标准 ASCII 表中最后一个大写字符 ( Z
) 和第一个小写字符 ( a
) 之间有以下字符
[ \ ] ^ _ `
按这个顺序。
您不会\
进入输出,因为 shell 会将转义空格字符视为文字空格。另请注意,由于输出了未加引号的反引号,因此这可能会导致意外的代码执行,如下所示斯特凡指出在 2015 年发送给邮件列表的消息中bug-bash
。
然而,我不太清楚手册中所说的“类型”,但我的猜测是你不能使用字母和数字,如{1..z}
(它确实不扩展)。