移动文本块

Shifting a block of text

尝试调整以下函数以使用所有参数而不仅仅是第一个参数。

代码应该在传递的每个参数开始之前引入 nc 空格。

每个移位的参数都必须换行。第一个参数是数字,定义移位量。

#!/bin/bash

shifted-block ()
{
 if (( $# == 1 )); then
   nc=0 ; arg=""
 elif (( $# >= 2 )); then
   nc="" ; arg=""
 else
   nc=0 ; arg=""
 fi

 nw=$(( nc + ${#arg} ))
 printf "%${nw}s\n" "$arg"
}

这是一个解决方案:

shifted-block ()
{
    local nc=0
    if (($# > 1)); then nc= ; shift ; fi

    local arg nw
    for arg in "$@" ; do
        nw=$(( nc + ${#arg} ))
        printf "%${nw}s\n" "$arg"
    done
}

下面是没有使用显式循环的版本

shifted-block () {
    (( $# > 1 ))                            &&
    printf -v leading_blanks '%*s' "" ""  &&
    shift                                   &&
    printf '%s\n' "${@/#/$leading_blanks}"
}