
문자를 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
왼쪽 패딩을 사용하여매개변수 확장 플래그. 여기서는 ight padding을 사용할 수도 있습니다 r
.
물론 꼭 사용할 필요는 없습니다 printf
. 기본적으로 a를 추가하는 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 --
printf '%s\n'
또는 print -rl --
인수가 전달되지 않는 경우(예: when )를 제외하고 한 줄에 하나의 요소를 인쇄하는 것과 같습니다 lines=()
. 이 경우 빈 줄 대신 아무것도 인쇄하지 않습니다.
답변3
나는 이것을 스크립트에서 사용합니다.
printf '%150s\n' | tr ' ' '@'
답변4
1년 전의 원본 게시물에 대한 솔루션:
printf를 사용하여 문자를 반복하고 끝에 개행 추가
printf '@%.0s' $(seq 1 $N); echo
다른 사람이 동일하거나 유사한 문제를 겪고 있는 경우를 대비해.