为了重复一个字符N次,我们可以使用 printf 。例如,要重复 @ 20次,我们可以使用这样的方法:
printf
@
N=20 printf '@%.0s' $(seq 1 $N)
产出:
@@@@@@@@@@@@@@@@@@@@
但是,该字符串的末尾没有换行符。我已经尝试将输出连接到 sed :
sed
printf '@%.0s' $(seq 1 $N) | sed '$s/$/\n/'
在不使用sed的情况下,一个 printf (在输出的末尾添加一个换行符)是否能够实现相同的结果?
发布于 2020-09-23 14:39:38
使用 zsh :
zsh
printf '%s\n' ${(l[20][@])}
(使用 l 左填充 参数展开标志 。您也可以在这里使用 r 点灯填充器)。
l
r
当然,您不必使用 printf 。您还可以在这里使用 print 或 echo ,它们在默认情况下会添加 \n 。( printf '%s\n' "$string" 可以用 zsh 编写 print -r -- "$string" 或 echo -E - "$string" ,但如果 $string 不包含反斜杠且不以 - 开头,则可以简化为 print "$string" / echo "$string" )。
print
echo
\n
printf '%s\n' "$string"
print -r -- "$string"
echo -E - "$string"
$string
-
print "$string"
echo "$string"
如果最终目标是显示填充到屏幕宽度的字符串列表,则应该这样做:
$ lines=(short 'longer text' 'even longer') $ print -rC1 -- ${(ml[$COLUMNS][@][ ])lines} @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ short