foo
아래 명령 과 같이 여러 줄에서 단어나 한 줄을 반복하는 방법
$ 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 시스템에는 주어진 문자열만 반복할 수 있는 바이너리도 있습니다 . 아니면 우분투 시스템 아래에 패키지하세요 athena-jot
.
jot -b 'howdy world' 3
답변2
tcsh
그리고 zsh
:repeat
repeat 3 echo word
이를 통해 printf
다음을 수행할 수 있습니다.
printf 'word\n%.0s' {1..3}