#bash #printf
#удар #printf
Вопрос:
Пытаюсь адаптировать следующую функцию для использования всех аргументов, а не только первого.
Код должен вводить пробелы nc перед началом каждого переданного аргумента.
Каждый сдвинутый аргумент должен находиться в новой строке. Первый аргумент числовой, определяющий величину сдвига.
#!/bin/bash shifted-block () { if (( $# == 1 )); then nc=0 ; arg="$1" elif (( $# gt;= 2 )); then nc="$1" ; arg="$2" else nc=0 ; arg="$1" fi nw=$(( nc ${#arg} )) printf "%${nw}sn" "$arg" }
Ответ №1:
Вот решение :
shifted-block () { local nc=0 if (($# gt; 1)); then nc=$1 ; shift ; fi local arg nw for arg in "$@" ; do nw=$(( nc ${#arg} )) printf "%${nw}sn" "$arg" done }
Ответ №2:
Ниже приведена версия без использования явного цикла
shifted-block () { (( $# gt; 1 )) amp;amp; printf -v leading_blanks '%*s' "$1" "" amp;amp; shift amp;amp; printf '%sn' "${@/#/$leading_blanks}" }