Гибкая векторная конструкция в tcsh

Генерация вектора - это метод, который позволяет нам генерировать списки без определения итераторов и циклов записи. Они полезны во многих ситуациях и могут сделать код более кратким и компактным. Они также облегчают быстрое составление более сложных конструкций с помощью command expansion.

Вот пример: у меня есть программа, которая работает с несколькими аргументами хоста. Мне нужно сгенерировать список имен хостов, в которые встроен порядковый номер, например:

a1z a2z a3z a4z a5z

В bash можно написать:

$ progname a{1..5}z

, который расширится до :

$ progname a1z a2z a3z a4z a5z

В tcsh, в которой отсутствует эта полезная функция генерации вектора аргумента, мы иногда можем использовать seq. К сожалению, seq ограничен только числами. man seq говорит, что seq поддерживает аргумент --format, но, похоже, он не делает действительно полезную вещь (допускает произвольные форматы, включая число). Вместо этого он поддерживает только изменение формата числа с плавающей запятой одного числа (очень жаль).

Конечно, мы можем делегировать расширение в bash + echo, используя как command expansion, так и полный аргумент bash -c:

tcsh> progname `bash -c "echo a{1..5}z"`

Аналогично, мы могли бы делегировать строку генерация вектора в больших утилитах , таких как awk, perl, python, lisp или R с использованием `` (расширение команды).

Вопрос в том, существуют ли другие простые способы генерации таких векторов в tcsh. Под «простым» я подразумеваю небольшую утилиту, такую ​​как seq, или, что еще лучше, встроенную конструкцию оболочки и не прибегая к написанию циклов или делегированию генерации вектора для «больших» программ, таких как bash/awk/clisp/perl/python/R?

2
задан 15 June 2013 в 06:33

1 ответ

Вы можете передать вывод seq.

progname `seq 5 | sed -e 's/^/a/' -e 's/$/z/'`

Вы можете использовать подстановку истории, чтобы добавить префикс ко всем элементам массива:

set a = (`seq 5`)
progname ${a:s//a/}

Я не знаю, как добавить суффикс, но я не tcsh эксперт.


Tcsh в некотором роде умер в этом столетии, и даже раньше он был широко признан менее подходящим для написания сценариев, чем оболочки в стиле Борна. Как насчет использования Zsh?

a=($(seq 5))
progname a${^a}z
0
ответ дан 15 June 2013 в 06:33

Другие вопросы по тегам:

Похожие вопросы: