Перемещение блока текста

#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}" }