printf를 사용하여 문자를 반복하고 끝에 줄바꿈을 추가합니다.

printf를 사용하여 문자를 반복하고 끝에 줄바꿈을 추가합니다.

문자를 N번 반복하려면 를 사용할 수 있습니다 printf. 예를 들어, 20번 반복하려면 @다음과 같이 사용할 수 있습니다.

N=20
printf '@%.0s' $(seq 1 $N)

산출:

@@@@@@@@@@@@@@@@@@@@

그러나 문자열 끝에는 개행 문자가 없습니다. 출력을 다음으로 파이핑해 봅니다 sed.

printf '@%.0s' $(seq 1 $N) | sed '$s/$/\n/'

printfsed를 사용하지 않고 단일(출력 끝에 개행 추가)로 동일한 결과를 얻을 수 있습니까 ?

답변1

printf %.1s @{1..20} $'\n'

쉘은 먼저 중괄호를 확장하는데, 이를 "중괄호 확장"이라고 합니다.
@{1..20}into @1 @2 @3 ...등. 그런 다음 1바이트(개행 문자)로 구성된
마지막 매개변수를 포함하여 각 매개변수의 첫 번째 바이트가 출력됩니다.$'\n'

답변2

그리고 zsh:

printf '%s\n' ${(l[20][@])}

( l왼쪽 패딩 사용매개변수 확장 플래그. 여기서는 가벼운 패딩을 사용할 수도 있습니다 r.)

물론 를 사용할 필요는 없습니다 printf. 또는 여기를 사용하면 print기본적으로 echo가 추가됩니다 \n. ( 또는 로 작성할 printf '%s\n' "$string"수 있지만 백 슬래시를 포함하지 않고 / 로 시작하지 않는 경우 / 로 단순화할 수 있습니다 .)print -r -- "$string"echo -E - "$string"zsh$string-print "$string"echo "$string"

최종 목표가 화면 너비를 채우는 문자열 목록을 표시하는 것이라면 다음과 같이 할 수 있습니다.

$ lines=(short 'longer text' 'even longer')
$ print -rC1 -- ${(ml[$COLUMNS][@][ ])lines}
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ short
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ longer text
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ even longer
$ print -rC1 -- ${(mr[$COLUMNS][@][ ])lines}
short @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
longer text @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
even longer @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

m플래그는 zsh가 각 문자의 표시 너비를 고려하도록 합니다(예: 위의 이중 너비 문자(브라우저는 이를 정확한 이중 너비로 렌더링하지 않을 수 있지만 터미널에서는 그래야 함)).

print -rC1 --인수가 전달되지 않은 경우(예: when )를 제외하고는 한 줄에 하나의 요소를 인쇄 printf '%s\n'하거나 유사하며 이 경우 빈 줄 대신 아무것도 인쇄하지 않습니다.print -rl --lines=()

답변3

내 스크립트에서는 이것을 사용합니다. printf '%150s\n' | tr ' ' '@'

답변4

1년 전의 원본 게시물에 대한 솔루션:

printf를 사용하여 문자를 반복하고 끝에 줄바꿈을 추가합니다.

printf '@%.0s' $(seq 1 $N); echo

다른 사람이 동일하거나 유사한 문제에 직면한 경우.

관련 정보