Shell的执行过程里说到,Shell将输入分解为tokens后,会按照下面的顺序进行扩展:
- { }扩展
- ~扩展
- Shell参数和变量扩展
- 命令替换
- 算术扩展
- 进程替换
- 单词拆解
- 文件名扩展
- 引号删除
其中,{ }扩展,单词拆解,文件名扩展,"$@“和$*,”${name[@]}"和${name[*]}会在扩展后增加单词的数目,其他的扩展都是一个单词扩展为另一个单词。
{ }扩展
{ }扩展的格式是可选的前缀,然后是{ }之间一系列用逗号分隔的字符串或序列表达式,然后是可选的后缀。扩展后,在{ }中的每个字符串之前加上前缀,之后加上后缀。{ }扩展后的结果保留了{ }里的顺序。
$ echo a{
b,c,d}e
abe ace ade
{ }扩展可嵌套
$ echo a{
b{
1,2,3},c,d}e
ab1e ab2e ab3e ace ade
{ }扩展里的序列表达式格式
{
x..y[..incr]}
例子
$ echo {
1..10} # 整型
1 2 3 4 5 6 7 8 9 10
$ echo {
01..0100} # 整型,固定宽度为4
0001 0002 0003 0004 0005 0006 0007 0008 0009 0010 0011 0012 0013 0014 0015 0016 0017 0018 0019 0020 0021 0022 0023 0024 0025 0026 0027 0028 0029 0030 0031 0032 0033 0034 0035 0036 0037 0038 0039 0040 0041 0042 0043 0044 0045 0046 0047 0048 0049 0050 0051 0052 0053 0054 0055 0056 0057 0058 0059 0060 0061 0062 0063 0064 0065 0066 0067 0068 0069 0070 0071 0072 0073 0074 0075 0076 0077 0078 0079 0080 0081 0082 0083 0084 0085 0086 0087 0088 0089 0090 0091 0092 0093 0094 0095 0096 0097 0098 0099 0100
$ echo {
01..100} # 整型,固定宽度为3
001 002 003 004 005 006 007 008 009 010 011 012 013 014 015 016 017 018 019 020 021 022 023 024 025 026 027 028 029 030 031 032 033 034 035 036 037 038 039 040 041 042 043 044 045 046 047 048 049 050 051 052 053 054 055 056 057 058 059 060 061 062 063 064 065 066 067 068 069 070 071 072 073 074 075 076 077 078 079 080 081 082 083 084 085 086 087 088 089 090 091 092 093 094 095 096 097 098 099 100
$