大括号扩展:运行多个命令而不是在一行上扩展?

hou*_*oft 12 linux bash expansion

当您在 bash 中使用大括号扩展时,类似

echo {a,b,c}
Run Code Online (Sandbox Code Playgroud)

变成

echo a b c
Run Code Online (Sandbox Code Playgroud)

有没有办法将其扩展为 3 个单独的命令,每个扩展一个?

以便:

echo {a,b,c}
Run Code Online (Sandbox Code Playgroud)

会成为

echo a
echo b
echo c
Run Code Online (Sandbox Code Playgroud)

unp*_*nic 13

这只是一个“因为我想知道”的问题,还是有真正的用例?我们可以通过一些体操来完成它:

$ eval echo\ {a,b,c}\;
a
b
c
Run Code Online (Sandbox Code Playgroud)

但我会追捕任何将此类混淆命令放入我们的系统脚本中的人。

为什么不更清楚一点:

$ for X in {a,b,c}; do echo $X; done
Run Code Online (Sandbox Code Playgroud)

您甚至可以全神贯注并放入几个换行符并缩进一点,这样您就始终能够理解您想要做什么。

  • @peth - 我假设这是一个简化的例子。如果它确实像列表一样简单,那么您是对的。如果它更像是 `file-{r,b,g}{m,n,o}{x,yz}.foo` 那么使用简短形式比枚举所有 27 个值更好。 (4认同)