Bash 스크립트는 awk에 달러 기호와 \r을 인쇄합니다.

Bash 스크립트는 awk에 달러 기호와 \r을 인쇄합니다.

나는 cat'ing하고 awk를 사용하여 일부 변수를 얻는 bash 스크립트를 가지고 있습니다. 첫 번째 것은 잘 작동하지만 두 번째 것은 앞에 $와 후행 \r... 아이디어가 있습니까?

#!/bin/bash
newTS=$( cat times.txt | awk -F';' '{print $2}')
ctime=$( cat times.txt | awk -F';' '{print $3}')
 echo 'nextTime='$newTS
 echo 'currentTime='$ctime

echo 명령으로 인해 발생하는 이유

+ echo $'currentTime=2020-04-21T12:36:14\r'

첫 번째 awk는 어디에 있나요?

+ echo nextTime=2020-04-21T11:46:11

따옴표나 변수 확장이 있어야 합니까?

이것은 내 times.txt 파일입니다.

2020-04-21T11:45:11;2020-04-21T11:46:11;2020-04-21T12:36:14

답변1

입력 파일은 DOS 텍스트 파일입니다. 이는 Unix 도구가 각 줄에 표시하는 마지막 문자가 캐리지 리턴(보통 캐리지 리턴으로 기록됨 \r)임을 의미합니다.

이는 행의 세 번째 필드의 일부이므로 \r두 번째 프로그램의 출력에서 ​​얻을 수 있습니다 . awk두 번째 필드가 줄 끝에 있지 않기 때문에 두 번째 필드에 없습니다. 따라서 첫 번째 프로그램은 여기에 포함된 문자열을 awk생성하지 않습니다 .\r

이를 사용하여 스크립트를 실행할 수도 있습니다 bash -x. 이를 통해 셸에서 출력을 추적(디버깅)할 수 있습니다. 쉘이 특수 문자(예: 캐리지 리턴)가 포함된 명령 추적을 출력할 때 쉘(?)은 연관된 문자열을 "C 문자열", 즉 $'...'.

dos2unix예를 들어 다음을 사용하여 입력 데이터 파일을 Unix 텍스트 파일로 변환합니다.

관련 정보