모든 문자열에 \r을 추가하는 Bash

모든 문자열에 \r을 추가하는 Bash

간단한 Linux BASH 스크립트를 만들려고 하는데 bash가 모든 문자열에 \r을 추가하고 'tr'을 사용하여 제거하려고 하면 새 스크립트가 추가되는 것을 확인했습니다! 여기 내 스크립트가 있습니다

#!/bin/bash
OUTFILE=$(echo -n `date +"%Y-%m-%d_%H-%m-%S"`)
ASD='DDD'
echo -n "DATE [$OUTFILE]"
echo -n "DDD [$ASD]"

그리고 여기에 출력이 있습니다

 bash -x backup-datadir.sh
+++ date +%Y-%m-%d_%H-%m-%S
++ echo -n 2020-03-09_13-03-44
+ OUTFILE=$'2020-03-09_13-03-44\r'
+ ASD=$'DDD\r'
' echo -n 'DATE [2020-03-09_13-03-44
' echo -n 'DDD [DDD-03-44

추가 \r이 나타나는 이유는 무엇입니까? ]는 개행 이후에 덮어쓰기 때문에 사라졌습니다. 나는 이것을 전에 본 적이 없습니다 ...

답변1

귀하의 스크립트는 DOS 텍스트 파일입니다. 즉, \r각 줄의 끝에 캐리지 리턴 문자(종종 로 작성됨)가 포함되어 있습니다. Unix 텍스트 파일에는 이것이 없으며 Unix 시스템이 그러한 문자를 출력할 때 커서 위치가 줄의 맨 처음으로 이동하게 됩니다. 해당 줄에 대한 추가 출력은 이전에 출력된 내용을 덮어씁니다.

스크립트를 Unix 텍스트 파일로 변환하면 문제가 해결됩니다.

$ bash -x script.sh
+++ date +%Y-%m-%d_%H-%m-%S
++ echo -n 2020-03-09_21-03-47
+ OUTFILE=$'2020-03-09_21-03-47\r'
+ ASD=$'DDD\r'
' echo -n 'DATE [2020-03-09_21-03-47
' echo -n 'DDD [DDD-03-47
$ dos2unix script.sh
dos2unix: converting file script.sh to Unix format...
$ bash -x script.sh
+++ date +%Y-%m-%d_%H-%m-%S
++ echo -n 2020-03-09_21-03-03
+ OUTFILE=2020-03-09_21-03-03
+ ASD=DDD
+ echo -n 'DATE [2020-03-09_21-03-03]'
DATE [2020-03-09_21-03-03]+ echo -n 'DDD [DDD]'
DDD [DDD]

(사용으로 인해 마지막 줄에 출력 후 줄 바꿈이 없습니다 echo -n).

$ bash script.sh
DATE [2020-03-09_21-03-19]DDD [DDD]

(사용으로 인해 마지막 줄에 출력 후 줄 바꿈이 없습니다 echo -n).

관련 정보