移动文本块
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}"
}
尝试调整以下函数以使用所有参数而不仅仅是第一个参数。
代码应该在传递的每个参数开始之前引入 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}"
}