Повторить символ в Fish Shell

Мне приходится печатать повторяющиеся символы на выходе терминала в моих сценариях, поэтому я получаю такие строки, как: =========================

*************************

+++++++++++++++++++++++++

Как мне легко получить этот вывод в Fish Shell?


person Epigene    schedule 21.07.2014    source источник


Ответы (4)


function underline -a char -a length
    printf '%*s\n' $length "" | tr ' ' $char
end
underline = 8
========

Это использует форматирование переменной длины printf и заполнение полей пробелами по умолчанию.

person glenn jackman    schedule 21.07.2014
comment
+1 за именованные аргументы. Однако решение с каналом для tr кажется мне неэлегантным. - person Epigene; 21.07.2014

Мне это нужно так часто, что я написал очень простую функцию do_str, которая повторяет заданную строку заданное количество раз.

Достаточно вставить приведенный ниже код в файл config.fish (и перезагрузить оболочку):

function do_str #defines the function, you can use any other name for it
  for i in (seq $argv[2]) #starts a for loop that will repeat as many times as second argument given
    printf $argv[1] #prints the first argument given (the string)
  end
end

Выполнение do_str = 4 дает ====, do_str "?.!" 4 дает ?.!?.!?.!?.!?.!

NB Если вам нужно напечатать знаки процента, вы должны экранировать двойные знаки процента И экранировать первый знак процента, поэтому, чтобы получить %%%%%%, вы должны вызвать do_str \%% 6

person Epigene    schedule 21.07.2014
comment
Если вы используете printf "%s" $argv[1], вам не нужно удваивать процент (хотя вам все равно нужно избегать его от рыбы или цитировать: do_str '%' 6) - person glenn jackman; 21.07.2014

Команда seq создана для таких вещей:

$ seq -f '' -s= 20
====================

$ seq -f '' -s+ 20
++++++++++++++++++++

$ seq -f '' -s+ 5
+++++

Но внимание:

После строки нет символа новой строки. Вы можете использовать флаг -t, чтобы добавить его:

$ seq -f '' -s+ -t\n 5
+++++
person adius    schedule 23.05.2018
comment
Это не удается, потому что -f не имеет %s: seq: формат «%s» имеет неизвестную директиву %s - person kolypto; 24.04.2020

В Рыбе 3:

string repeat -n80 + 

Где -n — количество повторений, а + — повторяемая строка.

person jleeothon    schedule 08.07.2020