Bash允许我编写语句,
$ for i in {h..k} ; do echo $i ; done
但是zsh仅允许数字列表扩展,例如{8..13}
。
最佳解决方法是什么?类似字符的[[seq ...
current release支持bash样式{c1..c2}
,其中c1
和c2
是字符:
['C0]'形式的表达式,其中{c1..c2}
和c1
是单个字符(可以是多字节字符),将扩展为从c2
到c1
的任何字符字符序列在内部使用。对于代码点低于128的字符,这是美国ASCII(这是大多数用户唯一需要的情况)。如果任何中间字符不可打印,则使用适当的引号使其变为可打印。如果字符顺序相反,则输出顺序相反,例如“c2
”被替换为“{d..a}
”。
这肯定在5.0.7起。我似乎找不到在d c b a
中引入它的时间,但是zsh release history表示它是在2012年7月至2014年11月之间引入的。
来自zsh$ setopt BRACE_CCL zsh$ echo {a-k} a b c d e f g h i j k zsh$ echo {1-9} 1 2 3 4 5 6 7 8 9
:BRACE_CCL用大括号括起来的表达式,否则不会大括号扩展到所有词的有序列表字符。参见ZSH Documentation。