打印多个空行而不重复\n

5 shell newlines

echo 用于在 Linux 中生成新行。

echo -e '\n' 2 行

echo -e '\n\n' 3行等等。

例如

user@linux:~$ echo

user@linux:~$ echo -e '\n'


user@linux:~$ echo -e '\n\n'



user@linux:~$ 
Run Code Online (Sandbox Code Playgroud)

除了打字\n\n,是否可以使用类似\n * 3.

期望输出

我知道echo -e '\n * 3'不会产生 3 行,但我希望你明白我的意思。

user@linux:~$ echo -e '\n * 3' # <== I hope you get what I mean



user@linux:~$ 
Run Code Online (Sandbox Code Playgroud)

ica*_*rus 12

如果您使用 bash 或 ksh93 或 zsh 那么

printf '%.0s\n' {1..3}
Run Code Online (Sandbox Code Playgroud)

将产生 3 个换行符。所述{1..3}膨胀到1 2 3,然后printf输出它们作为零宽度的字符串随后换行符。


ImH*_*ere 7

如果需要 POSIX 解决方案,请使用:

环形

除了明显的(和丑陋的)POSIX 循环:

i=0; while [ "$((i+=1))" -le 7 ]; do echo; done
Run Code Online (Sandbox Code Playgroud)

POSIX(便携式)

还有其他(更短,不一定更快)的解决方案:

(1) 打印空格,转换为换行符。

printf '%*s' 30 | tr ' ' '\n'
Run Code Online (Sandbox Code Playgroud)

(2) 或者,得到 23 行

seq 23 | tr -dc '\n'
Run Code Online (Sandbox Code Playgroud)

(3) 使用awk:

seq 23 | awk '{printf "\n"}'
Run Code Online (Sandbox Code Playgroud)

(4) 假设IFS是默认的

printf '%.0s\n' $(seq 23)
Run Code Online (Sandbox Code Playgroud)

(5)sed附加一个额外的换行符,对于 23 个换行符,使用 22:

printf '%0*d' 22 | sed 'y/0/\n/'
Run Code Online (Sandbox Code Playgroud)

(6) 一些 shell 会自动创建所有编号较低的数组元素。

zsh -c 'a[33]=1; printf "%.0s\n" "${a[@]}"'
Run Code Online (Sandbox Code Playgroud)

(7) 获取一些 NUL 字节

head -c 5 /dev/zero | tr '\0' '\n'
Run Code Online (Sandbox Code Playgroud)

广为人知

这些是除更广为人知(和使用)的解决方案之外的:

(8) 使用head计数:

yes '' | head -n 23
Run Code Online (Sandbox Code Playgroud)

(9)不是POSIX。对于某些 shell(至少是 ksh、bash、zsh):

printf '%.0s\n' {1..23}
Run Code Online (Sandbox Code Playgroud)

其他语言

而且,当然,使用(POSIX)高级语言:

(10) Perl

perl -e 'print "\n" x 23'
perl -E 'say "\n" x 22'  
Run Code Online (Sandbox Code Playgroud)

(11) PHP

php -r 'echo str_repeat( "\n" , 3 );'
Run Code Online (Sandbox Code Playgroud)

(12) 蟒蛇

python -c 'print("\n" * 3)'
Run Code Online (Sandbox Code Playgroud)


Edu*_*ani 6

$ yes "" | head -30
Run Code Online (Sandbox Code Playgroud)

给你 30 个换行符。

  • `head -30` 不可移植。使用 `head -n30` 或 `sed 30q`。 (3认同)