단어나 줄을 반복하는 방법

단어나 줄을 반복하는 방법

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 }'

jotBSD 시스템에는 주어진 문자열만 반복할 수 있는 바이너리도 있습니다 . 아니면 우분투 시스템 아래에 패키지하세요 athena-jot.

jot -b 'howdy world' 3 

답변2

tcsh그리고 zsh:repeat

repeat 3 echo word

이를 통해 printf다음을 수행할 수 있습니다.

printf 'word\n%.0s' {1..3}

관련 정보