(расширение zsh brace | seq) для списков символов - как?

Bash позволяет мне написать выражение,

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

но zsh допускает только расширение списка номеров, например {8..13}.

Какое лучшее обходное решение? Что-то вроде seq для персонажей...

Ответ 1

Поскольку это все еще главный результат Google, обновленный ответ:

текущая версия поддерживает bash style {c1..c2}, где c1 и c2 являются символами:

Выражение формы '{c1..c2}, где c1 и c2 - это одиночные символы (которые могут быть многобайтными символами), расширяется до каждого символа в диапазоне от c1 до c2 в любом символьная последовательность используется внутри. Для символов с кодовыми точками ниже 128 это US ASCII (это единственный случай, который потребуется большинству пользователей). Если какой-либо промежуточный символ недоступен для печати, для его распечатки используется соответствующая цитата. Если последовательность символов отменена, выход находится в обратном порядке, например. '{d..a} подставляется как' d c b a.

Это определенно присутствует в 5.0.7 и выше. Я не могу найти, когда это было введено в истории выпуска zsh, но первая архивная версия, документирующая ее, указывает, что она была введена с июля 2012 года по ноябрь 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