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)가 오지 않으면 줄의 나머지 부분이 왼쪽 가장자리부터 인쇄되어 이미 인쇄된 줄의 시작 부분을 덮어씁니다.

표준 Unix 줄 종결자는 CR LF가 아닌 LF입니다.

dos2unix파일에서 변수를 정의하거나 사용하는 스크립트 줄을 재정의합니다.

관련 정보