Если вы можете позволить себе вводить столько запятых, сколько smooth
команд вам нужно, вы можете воспользоваться расширением скобок, разделенным запятыми.
TL; DR
Вся командная строка для вашего примера:
generate | eval 'smooth |'{,,,,} plot
Замечания:
- добавить или удалить запятые, если вы хотите больше или меньше повторений
smooth |
- нет
|
раньше, plot
потому что это включено в последнюю smooth |
строку, созданную расширением скобки
- вы также можете предоставить аргументы
smooth
, если вы можете правильно их включить в заключенную в кавычки фиксированную часть, которая предшествует открытой фигурной скобке; в любом случае помните, что вы предоставляете их для всех повторений команды
Как это устроено
Разделенное запятыми расширение скобок позволяет динамически создавать строки, каждая из которых состоит из указанной фиксированной части плюс указанные переменные части. Он производит столько строк, сколько указано переменных частей, например, a{b,c,d}
производит ab ac ad
.
Небольшая хитрость заключается в том, что если вы скорее составите список пустых переменных частей, то есть только с запятыми внутри фигурных скобок, расширение скобок будет просто производить копии только фиксированной части. Например:
smooth{,,,,}
будет производить:
smooth smooth smooth smooth smooth
Обратите внимание, что 4 запятые производит 5 smooth
строк. Вот так работает этот Brace Expansion: он выдает в строку столько запятых плюс один.
Конечно, в вашем случае вам также нужно |
разделить каждый из них smooth
, поэтому просто добавьте его в фиксированную часть, но позаботьтесь о том, чтобы его правильно процитировать, чтобы оболочка не интерпретировала его сразу. То есть:
'smooth|'{,,,,}
будет производить:
'smooth|' 'smooth|' 'smooth|' 'smooth|' 'smooth|'
Позаботьтесь о том, чтобы всегда размещать фиксированную часть непосредственно рядом с открытой скобой, то есть без пробелов между '
и {
.
(Обратите также внимание, что для формирования фиксированной части вы также можете использовать двойные кавычки вместо одинарных кавычек, если вам нужно расширить переменные оболочки в фиксированной части. Просто позаботьтесь о дополнительном экранировании, которое требуется при появлении некоторых специальных символов оболочки внутри строки в двойных кавычках).
На этом этапе вам нужно eval
применить к этой строке, чтобы оболочка окончательно интерпретировала ее как конвейерную команду, которой она должна быть.
Таким образом, чтобы подвести итог всего этого, вся командная строка для вашего примера будет выглядеть так:
generate | eval 'smooth |'{,,,,} plot