bash:打印x个空行数
有时我想一次创建大量空白(与特定字符略有不同)。我尝试使用for循环执行此操作,但使用此实现只打印一次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 需要两
\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}
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中都不起作用