bash:打印x个空行数

bash:打印x个空行数,bash,shell,unix,Bash,Shell,Unix,有时我想一次创建大量空白(与特定字符略有不同)。我尝试使用for循环执行此操作,但使用此实现只打印一次\n。此外,实际的“\n”字符实际上是打印出来的,而不是空行。有什么更好的方法可以做到这一点 for i in {1....100} > do > echo "\n" > done 要打印5个空行: yes '' | sed 5q yes '' | sed ${N}q 要打印N个空行: yes '' | sed 5q yes '' | sed ${N}q 需要两

有时我想一次创建大量空白(与特定字符略有不同)。我尝试使用for循环执行此操作,但使用此实现只打印一次
\n
。此外,实际的“\n”字符实际上是打印出来的,而不是空行。有什么更好的方法可以做到这一点

for i in {1....100}
> do
>   echo "\n"
> done

要打印5个空行:

yes '' | sed 5q
yes '' | sed ${N}q
要打印N个空行:

yes '' | sed 5q
yes '' | sed ${N}q
  • 需要两个点,而不是任何其他数字:

    $ echo {1....5}
    {1....5}
    $ echo {1..5}
    1 2 3 4 5
    
    这就是为什么循环只执行一次

  • 如果要解释转义序列,需要使用
    echo-e
    调用它
  • echo
    无论如何都会输出一个换行符,因此
    echo-e“\n”
    会打印两个换行符。要防止
    echo
    打印换行符,必须使用
    echo-n
    echo-ne“\n”
    echo
    相同
  • 可以打印重复字符,在本例中为换行符,如下所示:

    printf '\n%.0s' {1..100}
    

正如Jerry评论的那样,您犯了语法错误

这似乎有效:

for i in {1..100}
do
    echo "\n"
done

您可以为此滥用printf:

printf '\n%.s' {1..100}
这会打印100次
\n
,后跟一个零长度字符串(因此有效地,
\n
打印100次)

使用大括号展开的一个警告是,除非对其求值,否则不能在其中使用变量:

count=100
eval "printf '\n%.s' {1..$count}"
为了避免评估,可以使用循环;它稍微慢一点,但除非您需要数千个,否则不会有问题:

count=100
for ((i=0;i<$count; i++)); do printf '\n'; done

Bash中的一个简单修复方法是将变量声明为整数(例如:
declare-i count
)。任何传递数字以外的内容的尝试都将失败。通过为大括号扩展传递非常大的值,仍然可能触发DOS攻击,这可能会导致bash触发OOM条件。

尝试以下任一方法

for i in {1..100}; do echo ; done


适用于Ubuntu16LTS和MacOS X

,因此请关闭“\n”,只使用echo而不带参数-echo会自动添加换行符,除非您使用-n选项。此外,您应该有
{1..100}
而不是
{1..100}因为四个点没有任何意义。
head
的可能重复比
sed
简单。乔洛巴:我不同意。”头-5'是7个字符,“sed 5q”只有6个字符。此外,使用sed可以减少您需要了解的工具的数量。有了sed,就不需要head了。这显然是用
\n
字符串打印100行。这在大多数POSIX shell中都可以使用,只是不
bash
echo
应该足够了。不确定为什么需要
\n
这在ubuntu 16和macos mohave中都不起作用