我不明白为什么这两个循环不同。它一定与何时执行大括号扩展以及如何解释空白有关
for i in b{e,\ }s ; do echo $i ; done
for i in bes b s ; do echo $i ; done
并考虑这一点
for i in $(echo b{e,\ }s) ; do echo $i ; done
答案1
当您这样做时for i in b{e,\ }s ; do echo $i ; done
,大括号扩展b{e,\ }s
将扩展为两个参数,一个是bes
,另一个是b s
,因此for
循环有两个要迭代的值。请注意,这里b s
只有一个参数。
另一方面,在 中for i in bes b s ; do echo $i ; done
,您明确提到了要迭代的三个参数(用空格分隔),即bes
、b
和s
。
在第三种情况下,命令替换$(echo b{e,\ }s)
将生成三个参数bes
,b
因此循环s
再次for
具有三个要迭代的值,就像第二种情况一样。