大括号扩展和复合命令

大括号扩展和复合命令

我不明白为什么这两个循环不同。它一定与何时执行大括号扩展以及如何解释空白有关

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,您明确提到了要迭代的三个参数(用空格分隔),即besbs

在第三种情况下,命令替换$(echo b{e,\ }s)将生成三个参数besb因此循环s再次for具有三个要迭代的值,就像第二种情况一样。

相关内容