有时候我想一次创建很多空格(与特定字符略有不同)。我尝试使用for循环来实现这一点,但我只打印了\n一次。此外,实际上打印的是'\n'字符,而不是空白行。有什么更好的方法来实现这一点?
\n
for i in {1....100} > do > echo "\n" > done
2admgd591#
要打印5个空行:
yes '' | sed 5q
要打印N个空行:
yes '' | sed ${N}q
o8x7eapl2#
$ echo {1....5} {1....5} $ echo {1..5} 1 2 3 4 5
这就是为什么你的循环只执行了一次。
echo
echo -e
echo -e "\n"
echo -n
echo -ne "\n"
printf '\n%.0s' {1..100}
oxcyiej73#
正如Jerry所说,您犯了一个语法错误。这似乎行得通:
for i in {1..100} do echo "\n" done
6gpjuf904#
请尝试以下操作之一
for i in {1..100}; do echo ; done
或者
for i in {1..100} do echo done
适用于Ubuntu 16LTS和MacOS X
0x6upsns5#
你可以滥用printf:
printf '\n%.s' {1..100}
这将打印\n,后面跟着一个零长度字符串100次(因此实际上是\n 100次)。使用大括号扩展的一个警告是不能在其中使用变量,除非对它求值:
count=100 eval "printf '\n%.s' {1..$count}"
为了避免eval,可以使用循环;它稍微慢一点,但应该不要紧,除非你需要成千上万的:
count=100 for ((i=0; i<$count; i++)); do printf '\n'; done
NB:如果你使用eval方法,请确保你信任你的计数,否则很容易将命令注入shell:
$ count='1}; /bin/echo "Hello World ! " # ' $ eval "printf '\n%.s' {1..$count}" Hello World !
在Bash中,一个简单的解决方法是将变量声明为整数(例如:declare -i count)。任何传递数字以外的内容的尝试都将失败。通过传递非常大的大括号扩展值仍可能触发DOS攻击,这可能导致bash触发OOM条件。
declare -i count
5条答案
按热度按时间2admgd591#
要打印5个空行:
要打印N个空行:
o8x7eapl2#
这就是为什么你的循环只执行了一次。
echo
解释转义序列,则需要使用echo -e
调用它。echo
无论如何都会输出一个换行符,所以echo -e "\n"
打印 * 两个 * 换行符。为了防止echo
打印一个换行符,你必须使用echo -n
,而echo -ne "\n"
和echo
是一样的。oxcyiej73#
正如Jerry所说,您犯了一个语法错误。
这似乎行得通:
6gpjuf904#
请尝试以下操作之一
或者
适用于Ubuntu 16LTS和MacOS X
0x6upsns5#
你可以滥用printf:
这将打印
\n
,后面跟着一个零长度字符串100次(因此实际上是\n
100次)。使用大括号扩展的一个警告是不能在其中使用变量,除非对它求值:
为了避免eval,可以使用循环;它稍微慢一点,但应该不要紧,除非你需要成千上万的:
NB:如果你使用eval方法,请确保你信任你的计数,否则很容易将命令注入shell:
在Bash中,一个简单的解决方法是将变量声明为整数(例如:
declare -i count
)。任何传递数字以外的内容的尝试都将失败。通过传递非常大的大括号扩展值仍可能触发DOS攻击,这可能导致bash触发OOM条件。