首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用printf重复字符并在末尾追加换行符

使用printf重复字符并在末尾追加换行符
EN

Unix & Linux用户
提问于 2020-09-23 12:55:23
回答 7查看 4.5K关注 0票数 9

为了重复一个字符N次,我们可以使用printf。例如,要重复@ 20次,我们可以使用这样的方法:

代码语言:javascript
运行
复制
N=20
printf '@%.0s' $(seq 1 $N)

产出:

代码语言:javascript
运行
复制
@@@@@@@@@@@@@@@@@@@@

但是,该字符串的末尾没有换行符。我已经尝试将输出连接到sed

代码语言:javascript
运行
复制
printf '@%.0s' $(seq 1 $N) | sed '$s/$/\n/'

在不使用sed的情况下,一个printf (在输出的末尾添加一个换行符)是否能够实现相同的结果?

EN

回答 7

Unix & Linux用户

回答已采纳

发布于 2020-09-23 14:39:38

使用zsh

代码语言:javascript
运行
复制
printf '%s\n' ${(l[20][@])}

(使用l左填充参数展开标志。您也可以在这里使用r点灯填充器)。

当然,您不必使用printf。您还可以在这里使用printecho,它们在默认情况下会添加\n。(printf '%s\n' "$string"可以用zsh编写print -r -- "$string"echo -E - "$string",但如果$string不包含反斜杠且不以-开头,则可以简化为print "$string"/echo "$string")。

如果最终目标是显示填充到屏幕宽度的字符串列表,则应该这样做:

代码语言:javascript
运行
复制
$ lines=(short 'longer text' 'even longer')
$ print -rC1 -- ${(ml[$COLUMNS][@][ ])lines}
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ short
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ longer text
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ even longer
$ print -rC1 -- ${(mr[$COLUMNS][@][ ])lines}
short @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
longer text @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
even longer @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

其中,m标志使zsh考虑到每个字符的显示宽度(就像上面的那些双宽度字符(您的浏览器可能不会呈现精确的双宽字符,但终端应该这样))。

print -rC1 --printf '%s\n'print -rl --一样,每行打印一个元素,除非在不向其传递参数的情况下(比如lines=()),在这种情况下,它不打印任何内容,而是打印空行)。

票数 11
EN

Unix & Linux用户

发布于 2020-09-23 14:53:30

代码语言:javascript
运行
复制
printf %.1s @{1..20} 外壳首先展开大括号,这称为“支撑展开”。然后输出每个参数的第一个字节,包括包含一个字节的最后一个参数(换行符)。\n'

外壳首先展开大括号,这称为“支撑展开”。然后输出每个参数的第一个字节,包括包含一个字节的最后一个参数(换行符)。

票数 15
EN

Unix & Linux用户

发布于 2020-09-23 13:41:33

我在一个脚本中使用这个:printf '%150s\n' | tr ' ' '@'

票数 2
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/610946

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档