Answers:
这仅仅是一个“因为我想知道”的问题,还是有一个真正的用例?我们可以通过一些体操来做到:
$ eval echo\ {a,b,c}\;
a
b
c
但是我会追查那些将这些混淆命令放入我们的系统脚本中的人。
为什么不进行澄清:
$ for X in {a,b,c}; do echo $X; done
您甚至可以全力以赴,并添加一些换行符并对其进行缩进,以便始终能够了解您要执行的操作。
for
作品,但它仍然是更多的输入:P
eval git branch -d \{ branch-a, branch-b }\;
根据马克·曼(Mark Mann)的选择答案,我能够进一步得出此示例,该示例非常有用:
$ eval echo\ category_{17,32,33}.properties\{,.bak\}\;
category_17.properties category_17.properties.bak
category_32.properties category_32.properties.bak
category_33.properties category_33.properties.bak
所显示的是,当您在一行中使用多次出现的括号扩展时,Mark的原始示例将单独打印每个变体。相反,我想用他的答案来移动/重命名多个文件。为了确保输出与mv
通常期望的格式(mv oldfilename newfilename
)相匹配,我避免了第二次出现大括号扩展,因此直到执行初始命令后才对它进行评估eval
。
由于上面的输出按预期显示,因此我能够运行以下命令:
$ eval mv\ category_{17,32,33}.properties\{,.bak\}\;
$ ls
category_17.properties.bak category_32.properties.bak category_33.properties.bak
非常感谢Mark的原始回答。如果您喜欢他的回答允许我做的话,请投票给他回答:-)
file-{r,b,g}{m,n,o}{x,y.z}.foo
则使用简短形式比枚举所有27个值更好。