첫 번째 파이프 작업에서 개행 문자가 제거되지 않는 이유는 무엇입니까?

첫 번째 파이프 작업에서 개행 문자가 제거되지 않는 이유는 무엇입니까?

내 줄 nextermCensus.lis에는 개행 문자가 포함되어 있습니다. 저는 첫 번째 줄에만 관심이 있습니다. 개행 문자를 제거하고 싶습니다. 하지만 작동하지 않습니다. 그래서 두 번째 방법을 사용하여 제거해야 합니다. $(echo $census_day | tr -d '\n')예상대로 작동합니다. 하지만 저는 한 줄로 하는 걸 정말 좋아해요.

census_day=`head -1 /dr4/home/operbat/batches/nextermCensus.lis | tr -d '\n'`
census_day=$(echo $census_day | tr -d '\n')

답변1

주문하다:

bla=`head -1 filename`

줄 바꿈이 제거되었습니다. 이 echo명령은 개행 문자를 다시 추가합니다.

노력하다:

echo "$bla\c"

(POSIX 호환 에코를 사용하는 경우) 이 표시됩니다 $bla.

답변2

기본적으로 echo후행 개행 문자는 인쇄하라는 문자열이나 변수에 추가됩니다. 첫 번째 명령은 완벽하게 작동합니다. 거기에는 개행 문자가 없습니다. 명령 대체( `...`또는 이에 상응하는 최신 명령 $(...))는 모든 후행 개행 문자를 제거합니다. 변수를 사용하려고 하는 경우에만 추가됩니다 echo.

예를 들어, 다음 파일이 제공됩니다.

$ cat foo.txt
a
b
c

다음을 사용하여 개행 문자를 제외한 첫 번째 줄을 저장할 수 있습니다 head.

$ census_day=`head -n 1 foo.txt`

이제 이 작업을 수행하면 개행 문자가 표시되지만 , 또는 (이를 지원하는 s의 경우 ) echo을 사용하면 다음 과 같은 내용 이 표시되지 않습니다. printfecho -necho

$ printf %s "$census_day" | od -tc
0000000   a
0000001

관련 정보