在 Fish Shell 中使用范围进行花括号扩展

37
在Bash中,我可以执行以下操作。
$ echo bunny{1..6}
bunny1 bunny2 bunny3 bunny4 bunny5 bunny6

有没有一种在fish中实现相同结果的方法?


4
对于不太熟悉fish的人,需要说明的是:fish确实支持花括号展开,但仅限于列表(例如,echo b{ar,az}),而不是范围。 - mklement0
1个回答

62

简短回答是 echo bunny(seq 6)

更长的答案:为了贯彻fish的哲学,用具体命令替换神奇的语法结构,我们应该寻找一个Unix命令来替代语法上的构造 {1..6}seq 恰好可胜任此任务;它可以输出某个范围内的数字,例如在这种情况下,是1到6的整数。fish(令人惭愧的是)省略了seq的帮助页面,但它是标准的Unix/Linux命令。

一旦我们找到这样的命令,我们就可以利用命令替换。命令(foo)bar执行命令替换,将foo展开成一个数组,并可能导致多个参数。每个参数都附带 'bar'。


7
不用担心。如果seq不存在,fish shell会自动定义它,因为fish源代码的某些部分需要它存在。 - Konrad Borowski
9
由于这是“fish brace expansion”的第一个结果,值得注意的是fish使用逗号进行简单的花括号扩展。例如,echo {foo,bar}mkdir --parents /tmp/{folder1,folder2,folder3} 的结果为 /tmp/folder1、/tmp/folder2、/tmp/folder3。更多信息请参见 http://fishshell.com/docs/2.0/index.html#expand。 - Elijah Lynn
2
关于 touch file{01..10},在 fish shell 中该如何实现? - 109149
4
你可以向seq命令传递一个格式字符串。例如:touch file(seq -f %02g 10) - ridiculous_fish
2
@109149 这个也应该可以工作:touch file(seq -w 10) - Theo C
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接