问:
我怎样能使用 echo 命令实现这个?
代码语言:javascript复制perl -E 'say "=" x 100'
答:
可以使用 Bash 中内置命令 printf:
代码语言:javascript复制printf '=%.0s' {1..100}
我们可以对 printf 命令进行以下测试:
代码语言:javascript复制$ printf '%.0s' 'A' | wc -c
0
$ printf '=%.0s' 'A'
=
然后我们可以理解上述语句是如何实现提问者所需的重复输出指定字符的需求的:
%.0s 是 printf 的格式说明符,其中:
% 表示这是一个格式转换说明符。
.0 指定了宽度为 0 的字段,对于字符串而言,这意味着不打印任何字符。
s 是格式转换字符,表示输出字符串。
{1..100} 是 Bash 的花括号扩展,它会扩展成从 1 到 100 的一系列数字:1 2 3 ... 99 100。
这样一结合起来,printf '=%.0s' {1..100} 实际上是尝试对从 1 到 100 的每一个数字执行格式化输出,但由于格式说明符指定的是一个宽度为 0 的字符串字段,因此命令只输出 100 次 = 而不会输出任何数字。
如果要使用 echo 命令,可结合循环语句来实现所需效果:
代码语言:javascript复制for i in {1..100}; do echo -n =; done
#或者
for ((i=0; i<100; i )); do echo -n =; done
实际上,还有很多其他命令组合也可实现同样的效果,具体可参考 stackoverflow 问答原文。
参考文档:
- stackoverflow question 5349718
- 如何在Bash中遍历由变量定义的数字范围