문자를 N번 반복하려면 를 사용할 수 있습니다 printf
. 예를 들어, 20번 반복하려면 @
다음과 같이 사용할 수 있습니다.
N=20
printf '@%.0s' $(seq 1 $N)
산출:
@@@@@@@@@@@@@@@@@@@@
그러나 문자열 끝에는 개행 문자가 없습니다. 출력을 다음으로 파이핑해 봅니다 sed
.
printf '@%.0s' $(seq 1 $N) | sed '$s/$/\n/'
printf
sed를 사용하지 않고 단일(출력 끝에 개행 추가)로 동일한 결과를 얻을 수 있습니까 ?
답변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
다른 사람이 동일하거나 유사한 문제에 직면한 경우.