(zsh brace expansion | seq) for character lists - how?

拥有回忆 提交于 2019-11-27 10:58:30

问题


Bash allows me to write the statement,

$ for i in {h..k} ; do echo $i ; done

but zsh only allows number list expansion such as {8..13}.

What's the best workaround? Something like seq for characters...


回答1:


As this is still a top google result, an updated answer:

The current release supports bash style {c1..c2} where c1 and c2 are characters:

An expression of the form ‘{c1..c2}’, where c1 and c2 are single characters (which may be multibyte characters), is expanded to every character in the range from c1 to c2 in whatever character sequence is used internally. For characters with code points below 128 this is US ASCII (this is the only case most users will need). If any intervening character is not printable, appropriate quotation is used to render it printable. If the character sequence is reversed, the output is in reverse order, e.g. ‘{d..a}’ is substituted as ‘d c b a’.

This is definitely present in 5.0.7 onwards. I can't seem to find when this was introduced in the zsh release history, but the first archived version documenting it indicates it was introduced between July 2012 and November 2014.




回答2:


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


来源:https://stackoverflow.com/questions/2394728/zsh-brace-expansion-seq-for-character-lists-how

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!