我怎么用echo来做呢?
perl -E 'say "=" x 100'
我怎么用echo来做呢?
perl -E 'say "=" x 100'
当前回答
另一种选择是使用GNU seq并删除它生成的所有数字和换行:
seq -f'#%.0f' 100 | tr -d '\n0123456789'
这个命令打印#字符100次。
其他回答
for i in {1..100}
do
echo -n '='
done
echo
printf -- '=%.0s' {1..100}
双破折号——表示“命令行标志的结束”,所以不要试图解析命令行选项后面的内容。
如果你想打印破折号字符,而不是=字符,多次,不包括双破折号-这是你会得到的:
$ printf '-%.0s' {1..100}
bash: printf: -%: invalid option
printf: usage: printf [-v var] format [arguments]
为什么不创建这样的一行函数呢:
function repeat() { num="${2:-100}"; printf -- "$1%.0s" $(seq 1 $num); }
然后,你可以这样调用它:
$ repeat -
----------------------------------------------------------------------------------------------------
或者像这样:
$ repeat =
====================================================================================================
或者像这样:
$ repeat '*' 8
********
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
稍微长一点的版本,但如果你出于某种原因必须使用纯Bash,你可以使用一个带增量变量的while循环:
n=0; while [ $n -lt 100 ]; do n=$((n+1)); echo -n '='; done
repeat() {
# $1=number of patterns to repeat
# $2=pattern
printf -v "TEMP" '%*s' "$1"
echo ${TEMP// /$2}
}