Nik*_*hos 6 bash brace-expansion
这是一个 bash 4 特定问题。我对 bash Brace Expressions 有点熟悉,我已经阅读了手册,但我不明白它实际上是如何工作的。
我想它与ASCII 表有关,但我不习惯搜索 bash 源代码来确认它,所以我的问题是:
为什么这会echo {G..a}扩展到
G H I J K L M N O P Q R S T U V W X Y Z [ ] ^ _ ` a
Run Code Online (Sandbox Code Playgroud)
从bash手册(我的重点):
序列表达式采用的形式是
{x..y[..incr]},其中x和y是整数或单个字符,而incr是可选增量,是整数。当提供整数时,表达式扩展到x和之间的每个数字y,包括。提供的整数可能以 为前缀,0以强制每个术语具有相同的宽度。当x或y以零开头时,shell 会尝试强制所有生成的术语包含相同数量的数字,并在必要时填充零。 当字符被提供,所述表达扩展到每个字符字典顺序之间x和y,包括,使用默认的 C 语言环境。 请注意,x和y必须是同一类型。当提供增量时,它被用作每个术语之间的差异。默认增量为 1 或 -1(视情况而定)。
以字母为范围的大括号扩展允许bash. 因此,您看到的是ASCII 表之间G和a中的字符(默认值为 1,因为值在表中按该顺序出现)。
在标准 ASCII 表中的最后一个大写字符 ( Z) 和第一个小写字符 ( )之间a,有
[ \ ] ^ _ `
Run Code Online (Sandbox Code Playgroud)
按照这个顺序。
您不会进入\您的输出,因为 shell 会将转义的空格字符视为文字空间。另请注意,由于输出了未加引号的反引号,这可能会导致意外的代码执行,正如Stéphanebug-bash在 2015 年发送给邮件列表的消息中所指出的那样。
然而,我不太清楚手册中将什么称为“类型”,但我的猜测是您不能使用字母和数字,如{1..z}(确实没有扩展)。
| 归档时间: |
|
| 查看次数: |
368 次 |
| 最近记录: |