![리디렉션된 출력에서 개행을 제거하는 방법](https://linux55.com/image/145583/%EB%A6%AC%EB%94%94%EB%A0%89%EC%85%98%EB%90%9C%20%EC%B6%9C%EB%A0%A5%EC%97%90%EC%84%9C%20%E2%80%8B%E2%80%8B%EA%B0%9C%ED%96%89%EC%9D%84%20%EC%A0%9C%EA%B1%B0%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95.png)
이와 같이 출력을 리디렉션하는 경우 개행 문자를 제거할 수 있나요?
echo "a" >> file
내 스크립트에는 모든 문자(숫자 제외)를 파일로 리디렉션하는 for 루프가 포함된 비슷한 내용이 있습니다. 하지만 내 목표는 이 출력을 한 줄에 넣는 것입니다. "a"를 10번 리디렉션했다고 가정하면 다음과 같습니다.
a a a a a a a a a a
그러나 그것은 다음과 같습니다:
a
a
a
a
[etc.]
답변1
구체적으로 요청하는 경우 다음을 사용하여 개행을 억제 echo
할 수 있습니다 -n
.
$ echo -n "test" >> outputfile
파이프 또는 리디렉션된 데이터에서 줄 바꿈을 억제하는 방법을 보다 일반적으로 묻는 경우 다음 도구를 사용하세요.많은피부. 간단한 방법은 다음과 같습니다 tr
.
$ do_stuff | tr -d "\n" >> outputfile
스크립팅과 데이터 출력을 막 시작했다면, 다음과 같이 echo
정확하게 사용하는 습관을 버리는 것이 좋습니다 printf
.
$ printf "test" >> outputfile
printf
여러 가지 면에서, 여러 가지 이유로 우수합니다 echo
. 그 중 가장 중요한 것은오직명시적으로 지시한 내용을 인쇄합니다(더 중요한 것은 원하는 형식으로 인쇄하는 것입니다).
답변2
나는 개행 문자를 제거하고 싶지 않고 공백으로 바꾸고 싶지 않다고 생각합니다.
for ((i=0; i<10; ++i)); do
echo a
done | tr '\n' ' ' >file
이는 출력을 사후 처리 echo
하고 데이터를 저장합니다 file
(이미 존재하는 경우 먼저 자릅니다).
아니면 좀 더 이국적인 일을 해보세요 bash
.
for ((i=0; i<10; ++i)); do
array+=( "a" )
done
printf '%s\n' "${array[*]}" >file
이는 행이 마지막 개행 문자로 적절하게 끝나는 반면 배열의 모든 요소는 $IFS
공백(의 첫 번째 문자)으로 구분된다는 장점이 있습니다.
또는 다음을 사용하여 /bin/sh
:
i=0
set --
while [ "$i" -lt 10 ]; do
set -- "$@" "a"
i=$(( i + 1 ))
done
printf '%s\n' "$*" >file
답변3
for i in `seq 1 10`; do
printf "a " >> file
done
그러면 문제가 해결될 것입니다.