
다음과 같이 열 머리글을 생성하려면:
1234567890123456789
저는 seq와 echo를 사용하려고 합니다.
seq -s '' 1 9 ; echo -n 0; seq -s '' 1 9
그러나 seq는 각 실행 후에 개행 문자를 출력합니다. 이것을 어떻게 피할 수 있습니까?
답변1
단지 print 를 원한다고 가정하면 1234567890123456789
다음과 같이 할 수 있습니다:
$ printf "%s" $(seq 1 9) $(seq 0 9)
1234567890123456789$
하지만 후행 줄 바꿈이 전혀 없으므로 다음을 선호할 수도 있습니다.
$ printf "%s" $(seq 1 9) $(seq 0 9) $'\n'
1234567890123456789
$
그렇지 않은 경우 더 쉬운 옵션이 있습니다.필요사용 seq
:
$ perl -le 'print 1..9,0,1..9'
1234567890123456789
$ printf "%s" {1..9} {0..9} $'\n'
1234567890123456789
이식성을 언급했으므로 해당 perl
방법을 사용하는 것이 좋습니다. 또는 이식성이 없는 시스템에 실행될 수 있지만 perl
셸에서 bash
등을 포함하여 동일한 명령을 실행해야 하는 경우에는 sh
시도해 보세요.dash
tcsh
카밀의 방법.
답변2
를 사용하여 모든 스트림에서 줄바꿈을 제거할 수 있습니다 tr -d '\n'
. 당신의 경우에는
(seq -s '' 1 9 ; echo -n 0; seq -s '' 1 9) | tr -d '\n'
다른 답변은 원래 접근 방식을 수정하는 데 중점을 둘 수 있지만 이 접근 방식은 이전 내용에 관계없이 개행 문자만 제거해야 합니다 |
.
답변3
나는 당신이 특정 문자열을 원하지 않고 가변 길이로 숫자가 증가하는 문자열을 원한다고 가정합니다. 이를 위해서는 여러 번의 호출을 통해 너비를 구축하는 것보다 숫자를 변경하여 너비를 변경할 수 있는 것이 유용할 수 있습니다 seq
.
Bash에서는 다음과 같은 것을 사용할 수 있습니다(19개의 긴 시퀀스에 대해):
for ((i=1; i <= 19; i++)); do printf "%d" "$(( i % 10 ))"; done; echo
이는 표준 셸(적어도 대시 및 비지박스)에서 작동합니다.
i=1; while [ "$i" -le 19 ]; do printf "%d" "$(( i % 10 ))"; i=$((i+1)); done; echo
답변4
그것을 사용할 때tr
후행 개행 문자를 제거하려면 다음을 제거한다는 점을 인식하는 것이 좋습니다.모두-d
옵션에 지정된 문자의 발생 횟수입니다. 따라서 더 얇게 만들 수 있습니다.
(seq 1 9; echo 0; seq 1 9) | tr -d '\n'
– echo
더 이상 필요하지 않습니다 -n
.
완전성을 위해 BSD 버전의 seq
when -s ''
사양은 종료 시 개행 문자를 생성하지 않습니다.