Bash 기본 문자열 조작으로 출력이 뒤죽박죽으로 표시됨

Bash 기본 문자열 조작으로 출력이 뒤죽박죽으로 표시됨

문자열을 쉘 변수로 대체하기 위해 bash 문자열 기본 조작을 사용하려고 했습니다.

var1='123'
var2='2018-01-01'
var3='2018-01-02'
var4='myfunction('var1','var2','var3')'

var5=${var4/var1/$var1}
echo $var5

var5=${var5/var2/$var2}
echo $var5

var5=${var5/var1/$var3}
echo $var5

예상 출력:

myfunction('123','var2','var3')
myfunction('123','2018-01-01','var3')
myfunction('123','2018-01-01','2018-01-02')

문자열이 뒤죽박죽된 실제 출력:

myfunction('123','var2','var3')
myfunction('123','2018-01-01','var3')
')function('123','2018-01-01','2018-01-02

여기서 마지막 두 문자가 처음 부분에서 이동하고 문자열의 처음 두 문자가 손실됩니다. 같은 용도로 SED를 사용할 수 있습니다. 하지만 저는 bash 기본 문자열 조작이 예상대로 작동하지 않는 이유를 알아내려고 노력 중입니다. 여러 대체 작업을 수행하고 있기 때문입니까?

당신의 도움을 주셔서 감사합니다.

답변1

콘텐츠 끝에 캐리지 리턴(CR) 문자가 있습니다 var3. 개행 문자(줄 바꿈, LF) 바로 뒤에 나오지 않고 인쇄된 후, 줄의 나머지 부분은 왼쪽 가장자리부터 인쇄되어 이미 인쇄된 줄의 시작 부분을 덮어씁니다.

유닉스 표준의 줄 끝은 CR LF가 아닌 LF입니다.

변수가 정의된 스크립트 줄을 다시 작성하거나 dos2unix파일에서 사용합니다.

관련 정보