我怎么用echo来做呢?
perl -E 'say "=" x 100'
我怎么用echo来做呢?
perl -E 'say "=" x 100'
当前回答
另一个使用printf和tr的bash解决方案
nb。在开始之前:
我们需要另一个答案吗?可能不会。 答案已经在这里了吗?看不见,就这样。
使用printf的前导零填充特性,并使用tr转换零。这避免了任何{1..N}发电机:
$ printf '%040s' | tr '0' '='
========================================
设置宽度为'N'字符,并自定义打印的字符:
#!/usr/bin/env bash
N=40
C='-'
printf "%0${N}s" | tr '0' "${C}"
对于大N,这比生成器的性能要好得多;在我的机器上(bash 3.2.57):
$ time printf '=%.0s' {1..1000000} real: 0m2.580s
$ time printf '%01000000s' | tr '0' '=' real: 0m0.577s
其他回答
我怎么用echo来做呢?
如果echo后面跟着sed,你可以用echo来实现:
echo | sed -r ':a s/^(.*)$/=\1/; /^={100}$/q; ba'
实际上,这个回声在这里是不必要的。
稍微长一点的版本,但如果你出于某种原因必须使用纯Bash,你可以使用一个带增量变量的while循环:
n=0; while [ $n -lt 100 ]; do n=$((n+1)); echo -n '='; done
这里有两种有趣的方法:
ubuntu@ubuntu:~$ yes = | head -10 | paste -s -d '' - ========== ubuntu@ubuntu:~$ yes = | head -10 | tr -d "\n" ==========ubuntu@ubuntu:~$
注意这两个方法略有不同——粘贴方法以新行结束。tr方法没有。
for i in {1..100}
do
echo -n '='
done
echo
问题是关于如何使用echo:
echo -e ''$_{1..100}'\b='
这将与perl -E 'say "=" x 100'完全相同,但只使用echo。