캐리지 리턴없이 $ something >> file.txt를 어떻게 에코합니까?


81

I echo $something >> file.txt일 때 새 줄이 파일에 추가됩니다.

줄 바꿈없이 추가하려면 어떻게합니까?


3
주의해야합니다. echo $something동작은 IFS변수에 따라 다르며 사라지는 문자로 끝날 수 있습니다. 다음과 같이 시도해보십시오 : var="hello world"; echo $var(hello와 world 사이에 두 공백) 또는 var="hello world"; IFS='l'; echo $var또는 var="-e hello \\n world"; echo $var. 이 문제를 해결하려면 다음과 같이 변수를 큰 따옴표로 묶 echo "$var"거나 사용하십시오 printf.
jfg956

답변:


96

그게 뭐야 echo -n.


4
에 해당하는 것이 cat있습니까? (예를 들어, 당신은 파일이있을 때 something.txt보다는 변수 $something)
cboettig

1
@cboettig : 아니요. 다른 도구를 사용하여 마지막 줄 바꿈을 제외한 모든 것을 인쇄하십시오.
Ignacio Vazquez-Abrams

@cboettig, cat은 기본적으로 출력에 아무것도 추가하지 않으므로 cat에 '-n'매개 변수가 필요하지 않습니다. 예를 들어, 파일에 마지막 줄에 줄 끝이 없으면 쉘 프롬프트는 파일의 마지막 문자 바로 다음에 새 줄에 인쇄되지 않습니다.
Rondo

41

printf보다 유연하고 휴대가 편리 echo합니다. C / Perl / etc 구현과 마찬가지로 형식 문자열을 종료하지 않으면 \n줄 바꿈이 인쇄되지 않습니다.

printf "%s" "$something" >> file.txt

7

명령 출력을 사용하는 경우 xargs를 echo와 함께 사용할 수 있습니다

/sbin/ip route|awk '/default/ { print $3 }' | xargs echo -n >> /etc/hosts

0

tr 또 다른 대안입니다.

echo입력으로 사용 하는 경우 어느를 얻을 수 있습니다 tr -d '\n'.

이 기술은 다른 명령의 출력을 파이핑 할 때도 작동합니다 (단일 출력 라인 만 있음). 또한 파일에 UNIX 또는 DOS 줄 끝이 있는지 모르는 경우 사용할 수 있습니다 tr -d '\n\r'.

이것이 작동한다는 것을 보여주는 몇 가지 테스트가 있습니다.

개행 포함 :

something='0123456789' ; echo ${something} | wc -c
11

유닉스 개행 :

something='0123456789' ; echo ${something} | tr -d '\n\r' | wc -c
10

DOS 스타일 :

something='0123456789' ; echo ${something} | unix2dos | tr -d '\n\r' | wc -c
10

BSD tr와 GNU로 테스트했습니다 tr.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.