我怎么用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
其他回答
下面是我在linux中用来在屏幕上打印一行字符的方法(基于终端/屏幕宽度)
在屏幕上输入“=”:
printf '=%.0s' $(seq 1 $(tput cols))
解释:
打印等号的次数与给定序列相同:
printf '=%.0s' #sequence
使用命令的输出(这是bash的一个叫做命令替换的特性):
$(example_command)
给出一个序列,我以1到20为例。在最后一个命令中,使用tput命令代替20:
seq 1 20
给出终端中当前使用的列数:
tput cols
function repeatString()
{
local -r string="${1}"
local -r numberToRepeat="${2}"
if [[ "${string}" != '' && "${numberToRepeat}" =~ ^[1-9][0-9]*$ ]]
then
local -r result="$(printf "%${numberToRepeat}s")"
echo -e "${result// /${string}}"
fi
}
样本运行
$ repeatString 'a1' 10
a1a1a1a1a1a1a1a1a1a1
$ repeatString 'a1' 0
$ repeatString '' 10
参考库:https://github.com/gdbtek/linux-cookbooks/blob/master/libraries/util.bash
没有简单的办法。使用printf和substitution避免循环。
str=$(printf "%40s")
echo ${str// /rep}
# echoes "rep" 40 times.
n=5; chr='x'; chr_string='';
for (( i=0; $i<$n; i++ ))
do
chr_string=$chr_string$chr
done
echo -n "$chr_string"
适用于…… N =整数(包括0和负数)。 Chr =可打印和空白(空格和制表符)。
最简单的方法是在bash中使用这一行代码:
seq 10 | xargs -n 1 | xargs -I {} echo -n ===\>;echo