
foo
以下のコマンドのように、複数行の単語または1行を繰り返す方法
$ foo 3 word
word
word
word
または
$ foo 2 An example line
An example line
An example line
同じ効果がある
$ seq 3 | sed s/./word/
word
word
word
または
$ yes word | head -3
word
word
word
私はこれがこれを裏付けると思いましたがseq
、私が知る限り、そうではありません。
答え1
これを行うには外部ユーティリティは必要なく、デフォルトシェルの内部printf()
機能を使用するだけです。たとえば、bash
シェルでは次のことができます。
foo() {
if [ "$1" -lt 2 ]; then
printf '%s\n' 'insufficient arguments provided' >&2
fi
local iter
for (( iter = 1; iter <= $1; iter++ )); do
printf '%s\n' "$2"
done
}
印刷したい単語を引用符で囲み、単語が散らばらないようにします。例えば
foo 3 bar
foo 3 'howdy world'
同じ外部ユーティリティを探している場合、または必要に応じて実行できるperl
場合awk
printf '%s\n' 'howdy world' | perl -ne 'print $_ x 3'
または
printf '%s\n' 'howdy world' | awk '{ for (i = 1; i <= 3; i++) print $0 }'
jot
BSDシステムには、与えられた文字列だけを繰り返すことができるバイナリもあります。またはUbuntuシステムの下にパッケージしてくださいathena-jot
。
jot -b 'howdy world' 3
答え2
tcsh
そして:zsh
repeat
repeat 3 echo word
これにより、printf
次のことができます。
printf 'word\n%.0s' {1..3}